考虑这段代码: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