Я следил за 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
.
Спасибо