私はSICPの次のセクションを読んでいます
http://mitpress.mit.edu/sicp/full-text/book/book-ZH-26.html#%_sec_4.1.7
テキストによると、eval
何度も評価される式は 1 回しか分析されないため、次の will better の変換によりパフォーマンスが向上します。
(define (eval exp env)
((analyze exp) env))
これは本で与えられたanalyze
関数です:
(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)))))
analyze
本が一度だけ実行されると言っている理由がわかりません。基本的に毎回呼び出されると言うの本体はeval
パラメータとして呼び出されるのではないでしょうか?これは、が呼び出されるたびに が呼び出されることを意味します。((analyze exp) env))
eval
analyze
exp
analyze
eval
私の理解の何が問題になっていますか?フィードバックをいただければ幸いです。