Czytam następującą sekcję SICPPytanie o SICP chpt 4.1: W jaki sposób (analysis expr) pomaga przyspieszyć eval?
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_sec_4.1.7
Zgodnie z tekstem, co następuje transformacja eval
poprawi oferuje poprawę wydajności, ponieważ wyraz, który pobiera ocenianego wielokrotnie analizowane będą tylko raz ?
(define (eval exp env)
((analyze exp) env))
Oto analyze
funkcja podana w książce:
(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)))))
Nie rozumiem, dlaczego książka mówi, że analyze
będzie działał tylko jeden raz. Czy ciało eval
, czyli , nie mówi, że za każdym razem, gdy jest wywoływane eval
, jako jego parametr zostanie wywołana analyze
z exp
? Oznaczałoby to, że analyze
będzie wywoływane za każdym razem, gdy zostanie wywołane eval
.
Co jest nie tak z moim zrozumieniem? Byłbym wdzięczny za wszelkie opinie, dzięki!