La siguiente parte del código Clojure da como resultado java.lang.StackOverflowError cuando lo llamo (avg-bids 4000 10 5). Intento averiguar por qué, dado que las ofertas de suma se escriben como una función recursiva de cola, eso debería funcionar. Usando Clojure 1.2.StackOverflowError en la función recursiva de cola
¿Alguien sabe por qué sucede esto?
(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)))
Una función recursiva de cola se llama a sí misma como lo último que hace. No veo nada de eso en tu código. – Gabe
@Gabe: loop-recur provoca un comportamiento parecido a la recursividad de cola. Ver http://clojure.org/special_forms. – Ralph
Ralph: 'loop-recur' es un patrón de bucle' for'. Llamar 'recurinc' como la última cosa en su función sería recursividad de cola, que no es lo que él hace. – Gabe