2012-07-04 15 views
7

Ejercicio 1.5. Ben Bitdiddle ha inventado una prueba para determinar si el intérprete al que se enfrenta está usando la evaluación del pedido aplicativo o la evaluación de orden normal. Se define las siguientes dos procedimientos:SICP Ejercicio 1.5

(definir (p) (p))

(definir (xy test) (si (= x 0) y))

Luego evalúa la expresión

(prueba 0 (p))

¿Qué comportamiento se observa Ben con un intérprete que utiliza evaluación de orden aplicativo? ¿Qué comportamiento observará con un intérprete que utiliza la evaluación de orden normal?

Entiendo la respuesta al ejercicio; mi pregunta radica en cómo (p) se interpreta frente a p. Por ejemplo, (prueba 0 (p)) hace que el intérprete cuelgue (lo que se espera), pero (prueba 0 p) con la definición anterior evalúa inmediatamente a 0. ¿Por qué?

Además, supongamos que hemos cambiado la definición a (define (p) p). Con la definición dada, (prueba 0 (p)) y (prueba 0 p) ambos evalúan a 0. ¿Por qué ocurre esto? ¿Por qué no cuelga el intérprete? Estoy usando al Dr. Racket con el paquete SICP.

Respuesta

15

p es una función. (p) es una llamada a una función.

En su intérprete evalúe p.

p <Return> 
==> P : #function 

Ahora evalúa (p). ¡Asegúrate de saber cómo matar a tu intérprete! (Probablemente hay un botón de parada “ ” en el Dr. raqueta.)

(p) 

Tenga en cuenta que no pasa nada. O, al menos, nada visible. El intérprete está girando, eliminando las llamadas de cola (por lo tanto, usando memoria cercana a 0), llamando al p.

Como p y evalúan a cosas diferentes, debe esperar un comportamiento diferente.

En cuanto a su segunda pregunta: Usted está definiendo p como una función que se devuelve a sí misma. De nuevo, intente evaluar p y (p) con su (define (p) p) y vea lo que obtiene. Mi suposición (estoy usando una computadora en la que no puedo instalar nada y que no tiene ningún esquema) es que evaluarán lo mismo. (Incluso podría apostar que (eq? p (p)) evaluará a #t.)

+0

+1 respuesta sucinta. Pruebe también con http://codepad.org. –

+0

Gracias. Yo también estoy buscando la respuesta. – user1166240