Рассмотрим следующее определение: СхемаСтранная рекурсивное определение в схеме
(define f (lambda() (procedure? f)))
Как ни странно, когда я оцениваю (f)
я #t
. Вопрос в том, почему эта оценка заканчивается? Я ожидал, что он зациклится на неопределенный срок. Что оценивает внутренний lambda
, так как f
еще не определен?
я вижу. Для меня рекурсивное определение функции означало ** любую ссылку ** на нее в ее определении, а не только на вызовы. Спасибо за уточнение. –
Теперь я думаю, что я понимаю это лучше. Рассмотрим следующее лямбда-выражение: (лямбда() (/ 1 0)); замечательно, переводчик его принимает. Должен ли я понять, что выражение лямбда никогда не оценивает его тело (это оценивается только в функциональных приложениях)? –
@ AlexM. Да. Он оценивается при вызове, а не при определении. – uselpa