私は今Programming Clojureを読んでいて、次の例を見つけました
(defn by-pairs [coll]
(let
[take-pair (fn [c] (when (next c) (take 2 c)))]
(lazy-seq
(when-let [pair (seq (take-pair coll))] ;seq calls here
(cons pair (by-pairs (rest coll)))))))
次のように、リストをペアに分割します
(println (by-pairs [1 2 1])) ((1 2) (2 1))
(println (by-pairs [1 2 1 3])) ((1 2) (2 1) (1 3))
(println (by-pairs [])) ()
(println (by-pairs [1])) ()
私が得ることができないのは、テイクペアの結果で seq を呼び出す必要があるのはなぜですか? では、なぜ私たちはただ書くことができないのか
(defn by-pairs [coll]
(let
[take-pair (fn [c] (when (next c) (take 2 c)))]
(lazy-seq
(when-let [pair (take-pair coll)]
(cons pair (by-pairs (rest coll)))))))
魔女の場合、結果は異なりますか、それともパフォーマンス上の理由がありますか?