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


person Vasaka    schedule 11.09.2012    source источник


Ответы (2)


Что происходит, так это то, что if никогда не достигается: именно из-за аппликативного порядка оценки оба аргумента для test оцениваются до фактического вызова test, и выражение (p) будет зацикливаться навсегда.

Если бы та же процедура оценивалась в обычном порядке, она вернула бы ноль, что этот пример и пытается продемонстрировать в первую очередь.

person Óscar López    schedule 11.09.2012

Используя DrRacket с директивой схемы #lang в первой строке, я пробовал так...

;say "hi" to Ben Bitdiddle

(define (q) (display "Hello?...Ben?)

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

Затем я воспользовался инструментом отладки DrRacket 5.3, чтобы пройти оценку.
Очевидно, что это оценка аппликативного порядка.

Окно Eval показывает -> Привет? ... Бен? за которым следует 0, потому что DrRacket оценивает вызов (q) перед вводом «если».

person Dean Moriarty    schedule 20.10.2012