我寫了一個程序(do-test)
。 由於測試可能對可變env
, 我定義env
內do-test
希望env
不會進行 與過程有一定的影響,所以每次我運行它,我會得到一個新的環境中工作。 令我驚訝的是,我的測試程序實際上是承載了以前的env
。 請找到follwing代碼:程序中定義的變量是否保留?
(define (do-test)
(define env '(1))
;(define env (list 1))
(display env)
(if (not (equal? (car env) 1))
(error "assertion failed.")
'ok)
(set-car! env 2)
'ok)
(do-test)
(do-test)
我試圖運行使用MIT的方案/詭計/ codepad.org這個代碼,所有的 告訴我,乳寧(do-test)
兩次產生不同的結果。
但是,如果我將行(define env '(1))
更改爲(define env (list 1))
,我會得到預期的結果。 (你可以找到我的代碼before和after在codepad.org的變化)
據我所知,'(1)
和(list 1)
應該只是第二同樣會調用程序list
。
我想知道爲什麼會發生這種情況,如何防止程序重複使用以前的值?