Common-Lisp:绑定形式参数,究竟是什么传递?

Dir*_*rts 4 symbols common-lisp

假设我们有一个符号,带有符号值,函数值和属性列表,让我们调用它q.假设我们还有一个f带有形式参数的函数v,例如(f (v) ... )调用函数就好了(f q).

我的问题是:究竟传递给了v什么?是

  1. 的价值q;
  2. 的功能价值q;
  3. 物业清单q,

传递给形式参数v

如果他们都传递到v,然后我的事实,我们真正需要的功能感到困惑funcallapply.如果v真的同时具有值​​和函数值,那么它肯定会自己决定在我们编写时(v 3),它必须使用函数值v而不是(funcall v 3).当我们使用时,(setq v 3)它必须使用的值v.

究竟传递给什么v,为什么v不是一个符号,而只是一个"参数"或"变量",对我来说是一个谜.但我相信它在Lisp 1.5中真的是一个象征.但是在共同的Lisp中,似乎存在一些混淆的空间.

Rai*_*wig 6

如果你有

(f q)
Run Code Online (Sandbox Code Playgroud)

它意味着用值来调用函数fq.

  1. Lisp认为这f是一个函数,所以整体(f q)是一个函数形式.
  2. Lisp评估q其价值.
  3. Lisp调用f一个值.
  4. Lisp将局部变量绑定v到传递的值
  5. Lisp执行函数体f ...

v在源代码中是一个符号,但它表示一个变量.在编译的代码中,符号消失了.由于Common Lisp使用词法绑定,因此变量现在是词汇引用.