Sono un neofita del clojure che voleva vedere di cosa si tratta. Immaginare il modo migliore per farsi un'idea è scrivere un codice semplice, ho pensato di iniziare con una funzione di Fibonacci.una funzione ricorsiva di Fibonacci in Clojure
Il mio primo sforzo è stato:
(defn fib [x, n]
(if (< (count x) n)
(fib (conj x (+ (last x) (nth x (- (count x) 2)))) n)
x))
di utilizzare questo ho bisogno di seminare x con [0 1] quando si chiama la funzione. La mia domanda è, senza avvolgerla in una funzione separata, è possibile scrivere una singola funzione che richiede solo il numero di elementi da restituire?
Facendo qualche lettura intorno a me portato ad alcuni modi migliori per raggiungere lo stesso funcionality:
(defn fib2 [n]
(loop [ x [0 1]]
(if (< (count x) n)
(recur (conj x (+ (last x) (nth x (- (count x) 2)))))
x)))
e
(defn fib3 [n]
(take n
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1]))))
In ogni caso, più per il bene del l'esercizio di ogni altra cosa, qualcuno può aiutarmi con una versione migliore di una funzione di Fibonacci puramente ricorsiva? O forse condividere una funzione migliore/diversa?
fib3 è il più Clojure'ish di questi –