Это вопрос, связанный с SICP. Книга Глава 3.5.2.
Я реализую структуру данных потока на других языках программирования. И я не уверен, правильно ли я понимаю следующий фрагмент.
(define (integers-starting-from n)
(cons-stream n (integers-starting-from (+ n 1))))
(define integers (integers-starting-from 1))
Из того, что я понял, в (integers-starting-from (+ n 1))
будет выполняться функция, которая возвращает значение, выполнив (cons-stream n (integers-starting-from (+ n 1))))
. Поскольку вторым формальным параметром cons-stream
является (integers-starting-from (+ n 1))
, и поскольку он заключен в ( )
, он будет выполнять функцию снова и снова бесконечно, вместо задержки выполнения.
Из того, что я вижу перед выполнением этого фрагмента, кажется, что следующее целое число приведет к бесконечной рекурсии еще до того, как будет выполнен элемент секунд потока.
Почему это работает для схемы, показанной во время лекции ?
Насколько я понимаю, вместо этого должно быть написано что-то вроде этого:
(define (integers-starting-from n)
(cons-stream n (lambda() (integers-starting-from (+ n 1)))))
(define integers (integers-starting-from 1))
Означает ли это, что в схеме есть какая-то магия, которая задерживает выполнение (integers-starting-from (+ n 1))
?
заранее спасибо
cons-stream
. - person user448810   schedule 26.11.2013