estoy leyendo la siguiente sección de SICPPregunta sobre SICP, capítulo 4.1: ¿Cómo ayuda (analice expr) a acelerar la evaluación?
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_sec_4.1.7
Según el texto, la siguiente transformación de eval
mejorará ofrece una mejora de rendimiento, ya que una expresión que obtenga evaluado muchas veces sólo se analizó una vez ?
(define (eval exp env)
((analyze exp) env))
Aquí es una función analyze
dada en el libro:
(define (analyze-if exp)
(let ((pproc (analyze (if-predicate exp)))
(cproc (analyze (if-consequent exp)))
(aproc (analyze (if-alternative exp))))
(lambda (env)
(if (true? (pproc env))
(cproc env)
(aproc env)))))
No entiendo por qué el libro dice que analyze
sólo se ejecutará una vez. ¿No es el cuerpo de eval
, que es ((analyze exp) env))
decir básicamente que cada vez que se llama eval
, se llamará analyze
con exp
como su parámetro? Esto significa que se llamaría al analyze
cada vez que se llame a eval
.
¿Qué hay de malo en mi entendimiento? Agradecería cualquier comentario, ¡gracias!