Sto leggendo la seguente sezione di SICPDomanda su SICP chpt 4.1: In che modo (analizza expr) aiuta ad accelerare l'eval?
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_sec_4.1.7
Secondo il testo, la seguente trasformazione di eval
migliorerà offre un miglioramento delle prestazioni, in quanto espressione che viene valutata molte volte verranno analizzati solo una volta ?
(define (eval exp env)
((analyze exp) env))
Ecco un analyze
funzione data nel 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)))))
Non capisco il motivo per cui il libro dice che analyze
verrà eseguito solo una volta. Non è il corpo di,, che è ((analyze exp) env))
sostanzialmente dire che ogni volta che viene chiamato eval
, analyze
verrà chiamato con exp
come parametro? Ciò significherebbe che analyze
verrebbe chiamato ogni volta che viene chiamato eval
.
Cosa c'è di sbagliato nella mia comprensione? Gradirei qualsiasi feedback, grazie!