Что (определение (р) (р)) делает? - PullRequest
5 голосов
/ 07 июля 2019

Я читаю «Структура и интерпретация компьютерных программ», 2-е издание в упражнении 1.5, я обнаружил комбинацию, в которой я не понимал, что именно она делает (define (p) (p)).

Когда я позвонилпроцедура (p) В следующей строке у меня мигал курсор без возможности что-либо написать.

(define (p) (p))
(p)

Я не знаю, чего ожидать от этой процедуры, потому что я определил ее сам.

Ответы [ 2 ]

5 голосов
/ 07 июля 2019

p - процедура без параметров. Его тело (p). В Схеме мы вызываем процедуры, заключая их в квадратные скобки вместе с их аргументами. Учитывая, что p не имеет параметров, (p) просто вызывает p. Который звонит p. Который звонит p ... и так далее. Так что же это делает? бесконечный цикл! и это все.

2 голосов
/ 08 июля 2019
(define (p) (p))
(p)

Это синтаксический сахар для этого

(define p (lamnda () (p))
(p)

После углубления SICP вы узнаете, что эту бесконечную рекурсию также можно выполнить так:

((lambda(s) (s s))
 (lambda(s) (display ".") (s s)))
...