me encontré con la StackOverflowError para el siguiente código:java.lang.StackOverflowError en la recursión de cola clojure
(defn recursive-reverse
([coll] (recursive-reverse [coll nil]))
([coll acc]
(if (= coll '()) acc
(recur (rest coll) (cons (first coll) acc)))))
aunque el uso del bucle sería hacer que funcione:
(defn recursive-reverse [lst]
(loop [coll lst acc nil]
(if (= coll '()) acc
(recur (rest coll) (cons (first coll) acc)))))
Qué va mal con el código antes sin lazo?
Gracias. Claro como el cristal ahora – lkahtz
'(nil? X)' podría ser mucho más rápido que '(= x())', porque el compilador puede emitir solo una operación de bytecode, la primitiva comprobación nula que usa Java. Por supuesto, este último es bastante rápido, pero sospecho que es varias veces más lento que el anterior. Da la casualidad de que esta nil-check optimizada no se ha implementado (¿todavía?), Pero es una optimización razonable que se puede hacer eventualmente. – amalloy