Следующий фрагмент кода Clojure приводит к java.lang.StackOverflowError, когда я вызываю его с помощью (avg-bids 4000 10 5). Я пытаюсь понять, почему, поскольку сумма ставок написана как хвостовая рекурсивная функция, так что это должно работать. Использование Clojure 1.2.
Кто-нибудь знает, почему это происходит?
(ns fixedprice.core
(:use (incanter core stats charts)))
(def *bid-mean* 100)
(defn bid [x std-dev]
(sample-normal x :mean *bid-mean* :sd std-dev))
(defn sum-bids [n offers std-dev]
(loop [n n sum (repeat offers 0)]
(if (zero? n)
sum
(recur (dec n) (map + sum (reductions min (bid offers std-dev)))))))
(defn avg-bids [n offers std-dev]
(map #(/ % n) (sum-bids n offers std-dev)))