SICP Упражнение 1.5

Exercise 1.5. Ben Bitdiddle has invented a test to determine whether the interpreter he is faced with is using applicative-order evaluation or normal-order evaluation. He defines the following two procedures:

(define (p) (p))

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

Then he evaluates the expression

(test 0 (p))

What behavior will Ben observe with an interpreter that uses applicative-order evaluation? What behavior will he observe with an interpreter that uses normal-order evaluation?

Я понимаю ответ на упражнение; мой вопрос заключается в том, как интерпретируется (p )по сравнению с p. Например, (test 0 (p ))приводит к зависанию интерпретатора (, что и ожидалось ), но (test 0 p )с приведенным выше определением немедленно оценивается как 0. Почему ?

Кроме того, предположим, что мы изменили определение на (define (p )p ). С данным определением, (test 0 (p ))и (test 0 p )оцениваются как 0. Почему это происходит? Почему не зависает интерпретатор? Я использую Dr. Racket с пакетом SICP.

7
задан JellalF 4 July 2012 в 19:37
поделиться