我試圖根據Harold Abelson和Gerald Jay Sussman着名的書籍「結構和計算機程序的解釋」在計劃中實現Metacircular Evaluator。Metacircular evaluation,implementation the environment
http://mitpress.mit.edu/sicp/full-text/sicp/book/node79.html,http://mitpress.mit.edu/sicp/full-text/sicp/book/node80.html
作者建議安裝環境是這樣的:
(define (define-variable! var val env)
(let ((frame (first-frame env)))
(define (scan vars vals)
(cond ((null? vars)
(add-binding-to-frame! var val frame))
((eq? var (car vars))
(set-car! vals val))
(else (scan (cdr vars) (cdr vals)))))
(scan (frame-variables frame)
(frame-values frame))))
(define (setup-environment)
(let ((initial-env
(extend-environment (primitive-procedure-names)
(primitive-procedure-objects)
the-empty-environment)))
(define-variable! 'true true initial-env)
(define-variable! 'false false initial-env)
initial-env))
不過,我不明白爲什麼我們在方案預計
(define myenv (setup-environment))
應該工作,因爲,正如我所知,Scheme默認將變量傳遞給函數,因此在兩次將「define-variable!」應用於initial之後-env,initial-env不會每次都被更改,並且setup-environment函數將在extend-environment返回值時返回值。
我的理解錯誤在哪裏,請問您能提供意見嗎?
預先感謝您!
是的,很多人認爲語言不是「按價值傳遞」,當他們真的是時,他們只是「按價值傳遞參考」。 – 2012-03-16 22:36:38
非常感謝!你說得對,我的問題不是很準確,請原諒,請原諒。下一次會更清楚。 – 2012-03-17 11:07:19