假设我们有一个符号,有一个符号值、一个函数值和一个属性列表,我们称它为 q
.假设我们有一个函数 f
带形参v
,例如(f (v) ... )
并调用像 (f q)
这样的函数.
我的问题是:到底传递给 v
的是什么? ?是
q
的值; q
的函数值; q
的房产列表, 传递给形参
v
?如果都传给
v
,那么我对我们真的需要函数funcall
这一事实感到困惑。和 apply
.如果 v
真的会同时拥有值和函数值,那么当我们写 (v 3)
时,它肯定可以自己决定,那么它必须使用v
的函数值而不是 (funcall v 3)
.当我们使用 (setq v 3)
那么它必须使用 v
的值.究竟传递给
v
的内容是什么?为什么v
不是一个符号,而只是一个“参数”或“变量”,对我来说是个谜。但我相信它在 Lisp 1.5 中确实是一个象征。但在普通的 Lisp 中,似乎有一些困惑的余地。
最佳答案
如果你有
(f q)
表示调用函数
f
值为 q
.f
是一个函数,所以整个 (f q)
是一种函数形式。 q
到它的值(value)。 f
有一个值。 v
到传递的值f
... v
在源代码中是一个符号,但它表示一个变量。在编译的代码中,符号消失了。由于 Common Lisp 使用词法绑定(bind),变量现在是词法引用。
关于Common-Lisp:绑定(bind)形式参数,到底传递了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37224597/