Binding CommonLisp:绑定和符号之间的区别

Binding CommonLisp:绑定和符号之间的区别,binding,lisp,common-lisp,symbols,Binding,Lisp,Common Lisp,Symbols,在公共lisp中设置绑定(LET)和符号(=变量)有什么区别(简单来说) 符号和变量是两种截然不同的实体。符号是某物的名称;变量是值的容器。变量可以用符号命名 绑定是符号和变量之间的关联;当绑定生效时,可以通过变量名引用变量letform创建这样一个绑定。(let((a1)))将a的值设置为1,直到到达let之前与开始方括号匹配的结束方括号为止,此时a恢复为其先前的值(或变得未定义)。您经常在函数体中看到一个let,其中您需要局部变量,这些变量需要在函数末尾超出范围,因此您可以在那里使用let

在公共lisp中设置绑定(LET)和符号(=变量)有什么区别(简单来说)

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

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

(let((a1)))将a的值设置为1,直到到达let之前与开始方括号匹配的结束方括号为止,此时a恢复为其先前的值(或变得未定义)。您经常在函数体中看到一个let,其中您需要局部变量,这些变量需要在函数末尾超出范围,因此您可以在那里使用let

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


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

你说“…和符号(=变量)”是什么意思?你能给我们举个例子,说明你所描述的两个概念的表达方式吗?如果我不够清楚,很抱歉。我在看这个教程:之间有什么区别:(let((a1))和(setfa1)(let((a1))…)创建一个变量(具有局部词法范围),符号a和这个变量之间的绑定(在“let”for中的词法上下文中)并将其初始化为1。(setf a 1)的行为可能不同:如果存在绑定a,则它会更改其值。如果没有绑定,它将创建一个全局绑定a并将其初始化为1。但是,全局绑定的类型未指定,并且在Lisp实现(及其版本)之间有所不同。因此,如果您有一个名为a的变量,setf将更改其值;否则,结果未完全指定。