Sto cercando di insegnarmi clojure e sto usando i principi di Prime Factors Kata e TDD per farlo.Ricorsione di coda clojure con fattori primi
Attraverso una serie di test Midje come questo:
(fact (primefactors 1) => (list))
(fact (primefactors 2) => (list 2))
(fact (primefactors 3) => (list 3))
(fact (primefactors 4) => (list 2 2))
sono stato in grado di creare la seguente funzione:
(defn primefactors
([n] (primefactors n 2))
([n candidate]
(cond (<= n 1) (list)
(= 0 (rem n candidate)) (conj (primefactors (/ n candidate)) candidate)
:else (primefactors n (inc candidate))
)
)
)
Questa grande opera fino a quando mi passi il seguente test caso limite a questo:
(fact (primefactors 1000001) => (list 101 9901))
Finisco con un errore di overflow dello stack. So che ho bisogno di trasformare questo in un vero e proprio ricorsivo, ma tutti gli esempi che vedo sembrano troppo semplicistici e puntano solo a un contatore o una variabile numerica come focus. Come faccio a renderlo ricorsivo?
Grazie!
Wow. Questa è la prima volta che vedo qualcuno che scrive Lisp che in realtà dà le proprie battute: P –