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:绑定和符号之间的区别的主要内容,如果未能解决你的问题,请参考以下文章