Важно понимать, что здесь оцениваются только те выражения, которые необходимы для вычисления элемента списка, к которому вы обращаетесь.
Поэтому, когда вы получаете доступ к первому элементу, он оценивает первый аргумент как cons-stream
, который равен 1
.
Когда вы получаете доступ ко второму элементу, он оценивает первый элемент stream-map (lambda (x) (+ x 1)) integers
. Для этого ему нужно получить первый элемент integers
, который равен 1
, а затем добавить к нему 1
, и вы получите 2
.
Когда вы получаете доступ к третьему элементу, он оценивает второй элемент stream-map (lambda (x) (+ x 1)) integers
. Таким образом, он берет второй элемент integers
(2
) и добавляет к нему 1
, чтобы получить 3
. И так далее.