(defn unfold [step seed]
(if-let [[val new-seed] (step seed)]
(cons val (lazy-seq (unfold step new-seed)))
nil))
Beispiel Nutzung:Hat Clojure "Entfalten"?
(defn fib-step [[x y]] [x [y (+ x y)]])
(take 10 (unfold fib-step [0 1])) ;=> (0 1 1 2 3 5 8 13 21 34)
(defn decreasing [x] (if (neg? x) nil [x (dec x)]))
(unfold decreasing 5) ;=> (5 4 3 2 1 0)
Ist dies oder etwas ähnliches in clojure Standard existieren (oder häufig verwendete) Libs? Wenn nicht, gibt es einen Grund, warum? Die nächstgelegene ich gefunden habe, ist diese Blog-Post:
http://www.matlux.net/blog/2014/05/04/anamorphic-adventure-in-clojure
Ich habe vergessen, was mich motiviert hat, die Frage zu stellen, aber ich wollte nur eine bessere Vorstellung davon bekommen, wie man idiomatische Clojure für solche Aufgaben schreibt. Ich denke, Ihre Antwort liefert gute Informationen, nach denen ich gesucht habe. –
groovy, danke! –