Common lisp 术语:变量和符号是否有值,或者它们是否绑定到值?

Common lisp 术语:变量和符号是否有值,或者它们是否绑定到值?,common-lisp,Common Lisp,函数的参数,我指的是x和y,如 有时也称为局部变量或局部参数或形式参数甚至参数。所有这些术语在Lisp中都是正确的吗?另一个术语更合适吗 还有一种说法是,函数的参数与正在调用的函数的参数值绑定。这个术语“必须”正确吗?或者我们必须说,它们将具有被调用函数的参数的“值” 有人说一个全局符号是“有价值的”还是“有价值的”?我在一本书中读到,这是造成巨大混乱的原因。在那本书中,有人建议“绑定到”一词不应用于全局符号,而应仅用于函数的参数。但另一方面,内置函数boundp与 在Lisp中也用于全局符号。

函数的参数,我指的是x和y,如

有时也称为局部变量或局部参数或形式参数甚至参数。所有这些术语在Lisp中都是正确的吗?另一个术语更合适吗

还有一种说法是,函数的参数与正在调用的函数的参数值绑定。这个术语“必须”正确吗?或者我们必须说,它们将具有被调用函数的参数的“值”

有人说一个全局符号是“有价值的”还是“有价值的”?我在一本书中读到,这是造成巨大混乱的原因。在那本书中,有人建议“绑定到”一词不应用于全局符号,而应仅用于函数的参数。但另一方面,内置函数boundp与


在Lisp中也用于全局符号。这表明符号不是“有值”,而是“绑定到值”

通用Lisp使用以下术语:

函数具有已定义的参数列表

函数调用的求值将每个参数与参数中的相应值的绑定添加到当前词汇环境中

全局变量在全局环境中具有绑定

参考

(defun foo (a b)
  (bar a b a b))
请参阅(ANSI Common Lisp标准的HTML变体),以及其中有关评估/编译和词汇表的章节。该文档描述了对通用Lisp有用的术语。其他Lisp方言(Emacs Lisp、ISLisp、Visual Lisp等)可能有不同的术语

示例

(defun foo (a b)
  (bar a b a b))
评论中解释了上述功能:

(defun foo        ; <- the name of the global function is foo

           (a b)  ; <- the list of parameters of the function foo

                  ; <- in the body, a and b are bound

                  ; in the body there is one function call form
  (bar            ; <- the function bar gets called
       a b a b)   ; <- the arguments to be evaluated
  )

(defun foo;这两个变体在Lisp世界中或多或少是同义词。罗伯特·威伦斯基(Robert Wilensky)在他的《通用LISPcraft》一书中要求澄清术语“绑定”.在数理逻辑中,函数的参数与参数的值绑定。但Wilensky似乎坚持全局变量“有”值,而不是“绑定”对于价值观。我想他在这里坚持清晰是正确的。提出这个问题的原因是在Lisp社区中似乎没有一个严格的术语。即使在印刷文本中,不同的作者也同意不同意。这里的建议是合理的。@user3144191:那本书“Common LISPcraft”是在ANSI通用Lisp标准发布前几年编写的。ANSI通用Lisp标准现在提供了该语言的术语。
(defun foo        ; <- the name of the global function is foo

           (a b)  ; <- the list of parameters of the function foo

                  ; <- in the body, a and b are bound

                  ; in the body there is one function call form
  (bar            ; <- the function bar gets called
       a b a b)   ; <- the arguments to be evaluated
  )