考慮這段代碼:Common Lisp的,參考值和實際值
(defvar lst '(1 1))
(defmacro get-x (x lst)
`(nth ,x ,lst))
(defun get-y (y lst)
(nth y lst))
現在讓我們假設,我想更改列表稱爲LST元素的值時,車 with get-x and the cdr with get-y。 當我試圖改變的價值與GET-X(與SETF)一切順利,但如果我得到-Y它標誌着一個錯誤(縮短)嘗試:
;抓到STYLE-WARNING: ;未定義函數:(SETF GET-STUFF)
爲什麼會發生這種情況?
我自己也懷疑,這是因爲宏只是展開和功能第n個簡單地返回到列表中的一個元素,而另一方面函數的值的參考評估函數調用第n並返回參考值的值(聽起來令人困惑)。
我糾正我的懷疑嗎? 如果我是正確的,那麼如何才能知道什麼僅僅是對一個值和一個實際值的引用?
我實際上並不認爲到目前爲止在C++意義上的Common Lisp中有引用,這要感謝清除它。我必須弄清楚我的問題的解釋,所以這就是我想出的。 用SETF GET-Y這樣的名稱來定義函數的這件事對我來說是一種全新的概念...無論如何,我會對此做更多的研究,感謝您的幫助! – Johan 2011-05-02 13:05:59