(defn unfold [step seed]
(if-let [[val new-seed] (step seed)]
(cons val (lazy-seq (unfold step new-seed)))
nil))
使用例:それはClojureの標準(または一般的に使用される)LIBSに存在するようにClojureは「展開」していますか?
(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)
がこのか何かをしていますか?そうでない場合は理由がありますか?私が見つけた最も近いが、このブログの記事です:
http://www.matlux.net/blog/2014/05/04/anamorphic-adventure-in-clojure
私は質問をするために何が動機づけられたのか忘れてしまったが、私はちょうどそのような作業のために慣用句を書く方法のよりよい考えを得たかった。あなたの答えは、私が探していた情報の種類を提供する良い仕事をすると思います。 –
グルービー、ありがとう! –