2012-09-11 11 views
5

Además de la pregunta What's the explanation for Exercise 1.6 in SICP?. Así que el Dr. Racket (R5RS) evalúa la función sqrt-iter con "if" en tiempo finito, mostrando claramente la evaluación de orden normal. Pero si utilizo ejemplo de ejercicio 1,5SICP ejercicio 1.5 y 1.6

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

se entra en un bucle infinito, me hace pensar "si" utiliza la evaluación para aplicativo. Entonces, ¿dónde me equivoco?

Respuesta

8

Lo que pasa es que no se alcanza nunca el if: precisamente a causa de la orden aplicativa de la evaluación a los dos argumentos se evalúan test antes de activar realmente test, y la expresión (p) voluntad bucle infinito.

Si el mismo procedimiento se evaluó utilizando el orden normal, devolvería cero, eso es lo que este ejemplo intenta demostrar en primer lugar.

3

Usando DrRacket con una directiva esquema #lang en la primera línea, he tratado de esta manera ...

;say "hi" to Ben Bitdiddle 

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

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

Luego utiliza la herramienta de depuración 5.3 DrRacket al paso a través de la evaluación.
Es claramente una evaluación de orden de aplicación.

Evaluar ventana muestra -> ¿Hola? ... ¿Ben? seguido de 0 cuz DrRacket evalúa la llamada a (q) antes de ingresar el "si".