Common-Lisp:绑定(bind)形式参数,到底传递了什么?

标签 common-lisp symbols

假设我们有一个符号,有一个符号值、一个函数值和一个属性列表,我们称它为 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 .
  • Lisp 看到 f是一个函数,所以整个 (f q)是一种函数形式。
  • Lisp 计算 q到它的值(value)。
  • Lisp 调用 f有一个值。
  • Lisp 绑定(bind)局部变量 v到传递的值
  • Lisp 执行函数体 f...
  • v在源代码中是一个符号,但它表示一个变量。在编译的代码中,符号消失了。由于 Common Lisp 使用词法绑定(bind),变量现在是词法引用。

    关于Common-Lisp:绑定(bind)形式参数,到底传递了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37224597/

    相关文章:

    common-lisp - 重新定义内置功能

    package - common-lisp 包中的阴影(重新定义)符号最终出现错误

    lisp - 如何使使用元类的类的实例继承自特定的父类(super class)

    lisp - 符号和名称不同吗?

    flash - AS3库符号链接(symbolic link)

    windows - 如何将函数地址转换为符号

    lisp - 将两个列表附加在一起

    java - JTextPane 的等宽字体/符号

    functional-programming - LISP 中的变量和符号有什么区别?

    C# 相当于 Ruby 符号