フィボナッチ数列
(defn fib ([] (concat [0 1] (fib 0 1))) ([a b] (lazy-seq (cons (+ a b) (fib b (+ a b)))))) (println (take 20 (fib))) (def fib-seq ((fn rfib [a b] (lazy-seq (cons a (rfib b (+ a b))))) 0 1)) (println (take 20 fib-seq))
lazy-seq が ポイント。無限のフィボナッチ数列を定義して、takeで任意の長さ分だけ取り出している。
無限の再帰呼び出しで、処理が返ってこなくなることはない。