В чем смысл этой схемы - PullRequest
5 голосов
/ 28 мая 2010

Я новичок в Схеме, посмотрев на Упражнение 1.5 SICP, каково значение / использование этого выражения?

(define (p) (p))

Спасибо! * * 1004

Ответы [ 2 ]

8 голосов
/ 28 мая 2010
(define (p) (p))

Выше определено, что функция p не принимает аргументов и вызывает себя рекурсивно (бесконечно).

Упражнение 1.5 посвящено аппликативному порядку против оценки нормального порядка.

(define (test x y)
  (if (= x 0)
       0
       y))

(test 0 (p))

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

2 голосов
/ 28 мая 2010

'define' определено в самом начале, в главе 1 :

Общая форма определения процедуры:

(определить (<имя> <формальные параметры>) <тело>)

После оценки определения вы видите, что ваша процедура просто вызывает сама себя. Хитрость заключается в порядке оценки аргументов процедуры «теста», как вы могли бы понять из вопроса об упражнении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...