This章說的actual-value
提取一個thunk真實價值的定義是這樣的:thunk對象的評估如何工作?在SICP
(define (actual-value exp env)
(force-it (eval exp env)))
但如果exp
本身就是一個thunk?根據delay-it
的定義,這意味着它是形式爲(list 'thunk exp env)
的列表對象。然而,eval函數決不能用於處理以「thunk」開頭的標記列表。爲什麼由於cond表達式不匹配,eval不會產生錯誤?
編輯: 我認爲評估下面的表達式應導致一個錯誤:
(define (add a) (+ 2 a))
(add 0)
add
是這樣的化合物的程序,因此delay-it
是其參數被應用之前進行。 +
是一個原始的產物,這意味着actual-value
將被調用其參數。參數是2和a。 a是一個thunk對象,因此actual-value
在將它傳遞給eval
時應該會產生錯誤,因爲eval
沒有處理標記爲「thunk」的列表的cond情況。
你能提供一個實際代碼的例子嗎?我有一個預感,它不可能在實踐中發生,通過建設 –
@ÓscarLópez:我已經增加了一個例子。 – kahoon