common-lisp:绑定和符号之间的区别

Posted

技术标签:

【中文标题】common-lisp:绑定和符号之间的区别【英文标题】:common-lisp: difference between binding and symbol 【发布时间】:2011-02-09 11:39:43 【问题描述】:

在 common lisp 中设置绑定 (LET) 和符号 (=variables) 之间有什么区别(简单来说)?

【问题讨论】:

“...和符号(=变量)”是什么意思?您能给我们提供您所描述的两个概念的表达示例吗? 【参考方案1】:

符号和变量是两种截然不同的实体。符号是事物的名称;变量是一个值的容器。变量可以用符号命名。

绑定是符号和变量之间的关联;当绑定生效时,您可以通过变量名来引用变量。 let 表单创建这样的绑定。

【讨论】:

对不起,如果我不够清楚。我在看这个教程:en.wikibooks.org/wiki/Common_Lisp/First_steps/Beginner_tutorial 有什么区别:(let ((a 1))) 和 (setf a 1) (let ((a 1)) ...) 创建一个变量(具有局部词法范围),符号 A 和这个变量之间的绑定(在“let” for 内的词法上下文中)并将其初始化为 1。 (setf a 1) 的行为可能不同:如果存在绑定 A,则它会更改其值。如果没有绑定,它会创建一个全局绑定 A 并将其初始化为 1。但是,全局绑定的类型未指定,并且在 Lisp 实现(及其版本)之间有所不同。所以如果你有一个名为 A 的变量,setf 会改变它的值;否则结果未完全指定。【参考方案2】:

(let ((a 1))) 将 a 的值设置为 1,直到到达 let 之前与左括号匹配的右括号,此时 a 恢复为之前的值(或变得未定义)。您经常会在函数体中看到 let ,其中需要在函数末尾超出范围的局部变量,因此您会在此处使用 let 。

(setf a 1) 将 a 设置为 1,并假设 a 已经被定义(无论是通过 defparameter、defvariable 还是 let),或者 a 是一个新的特殊变量,需要一个值。

这比这要复杂一些,但我不确定我是否有口齿不清的能力来解释它。

【讨论】:

以上是关于common-lisp:绑定和符号之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

有符号/无符号字符之间的区别[重复]

值和绑定之间的区别

c中的有符号字符和无符号字符之间的区别

“使用”和“重新绑定”变量之间的含义和区别是啥?

影片剪辑和图形符号之间的性能有区别吗?

WSDL中SOAP绑定和HTTP绑定之间的区别