Я являюсь новым для Интригования путем рассмотрения Упражнения 1.5 SICP, каково значение/использование этого выражения?
(define (p) (p))
Спасибо!
(define (p) (p))
Выше определена функция p
, не принимающая аргументов и вызывающая себя рекурсивно (бесконечно).
Упражнение 1.5 посвящено оценке аппликативного и нормального порядка.
(define (test x y)
(if (= x 0)
0
y))
(test 0 (p))
При аппликативном порядке оцениваются все аргументы, а затем они применяются к test
, поэтому программа зависнет, если интерпретатор использует этот вид оценки в данном конкретном случае.
'define' определен в самом начале, в главе 1 :
Общая форма определения процедуры -
(define (
<формальные параметры>) )
После того, как вы оцените определение, вы увидите, что ваша процедура просто вызывает саму себя. Уловка заключается в порядке оценки аргументов процедуры «теста», как вы могли понять из вопроса упражнения.