StackOverflowError для хвостовой рекурсивной функции

Следующий фрагмент кода 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))) 
5
задан Maurits Rijk 22 November 2010 в 20:28
поделиться