私はThe Joy of Clojureをフォローしていましたが、これらの 2 つのステートメントに困惑しています。
(def very-lazy (-> (iterate #(do (print \.) (inc %)) 1) rest rest rest))
(def less-lazy (-> (iterate #(do (print \.) (inc %)) 1) next next next))
したがって、出力は
(println (first very-lazy)) ; .4
(println (first less-lazy)) ; 4
本はそれを説明し続けた
rest で構築された遅延 seq の最初の要素を取得すると、期待どおりに実現されます。しかし、next で構築された seq については、以前に実現されているため、同じことは起こりません。next を使用すると、レイジー seq が 1 つ少ない要素のレイジーになります。これは、実現のコストが高い場合は望ましくない可能性があります。
私の切実な質問は、なぜ「非常に怠け者」に余分なドットがあるのですか? 私の考えでは、「print」は、next
またはの場合に関係なく、呼び出されたときにその引数を出力しますrest
。
ありがとう