Kiedy biegnę (println (iterate inc 0))
w moim repl, będę się mniej więcej tak:(println (iterate inc 0)): dlaczego to nawet rozpoczyna drukowanie?
user=> (println (iterate inc 0))
(0 1 2 3 4 5 6 7 8 9 10 11 12 13 ....................
moje oczekiwania kiedy uruchomić kod jest repl pokazuje nic i po prostu utknął bo (iterate inc 0)
nigdy się nie kończy. Ale widzę (0 1 2 3 ...
.
generuje nieskończoną sekwencję, która nigdy nie powraca. Jeśli to się nigdy nie kończy, dlaczego println
zaczyna drukować wartości?
Innymi słowy, dlaczego (println xx)
zaczyna być oceniane, nawet jeśli dane wejściowe nigdy nie zostały zakończone, gdy są oceniane?
'println' nie trzeba całą sekwencję być zrealizowane przed drukowaniem , robi to na żądanie. "który nigdy nie wraca". '(first (iterate inc 0))' zwróci ci '0' z tego samego powodu. – zerkms