從CLHSsymbol-macrolet句柄如何實現陰影效果?
符號macrolet詞法建立擴展函數對每個由符號指定的符號的宏。
...
使用符號macrolet可以通過讓被遮蔽。
這讓下面的代碼工作(* B * X內勢必爲「1」):
CT> (with-slots (x y z) *b*
(let ((x 10))
(format nil "~a ~a ~a" x y z)))
"10 2 3"
我的問題是:如何符號宏讓知道哪些形式被允許影子呢?我問,宏不能保證let不被重新定義,或者用戶沒有創建另一個表單來完成與let相同的工作。這是一個特殊的'愚蠢'的情況下,只是看看CL:讓符號?還是有一些更先進的技術正在進行?
我很高興編輯這個問題,如果它太模糊,我很難闡明這個問題。
我確實不確定你在問什麼,但請記住'symbol-macrolet'和'let'本身都是*特殊操作符* - 語言的構建磚塊。他們不應該被重新定義或遮蔽,否則就會發生混亂。 –
是的,我想知道讓事實是否特別與這是如何做有關。看過Ben的回答後,我瞭解到宏可以獲得關於他們所處的詞彙環境的信息,這些環境非常有趣並且可能是相關的......我需要閱讀! – Baggers