clojure rest и следующий связанный

Я следил за The Joy of Clojure , и я озадачен этими двумя утверждениями

(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

В книге продолжалось объяснение, что

Захват первого элемента в lazy seq, построенный с помощью rest, как и ожидалось, вызывает реализацию .Но этого не происходит с последовательностью, созданной с помощью next, потому что она уже была реализована ранее. Использование next приводит к тому, что lazy seq становится на один элемент менее ленивым, что может быть нежелательно , если стоимость реализации высока.

У меня животрепещущий вопрос: почему для слова «очень ленивый» стоит дополнительная точка? Я думал, что «print» будет печатать свой аргумент при вызове независимо от того, next или rest .

Спасибо

7
задан Reinstate Monica 2 November 2011 в 17:41
поделиться