lisp - Common Lisp 中 let 定义的变量是否可变?

标签 lisp common-lisp let

例如,Common Lisp 中的 let

(let ((a 5)) (print a))

a 是否像 defparameter 那样可变,或者 a 是否像 defvar 那样是常量?

最佳答案

您可以更改 a 绑定(bind)到的内容,即让 a 引用其他内容:

(let ((a 5)) (setf a 10))

如果 a 引用的值是可变的,你可以改变它:

(let ((a (list 5))) (setf (first a) 10))

Is a mutable as with defparameter, or is a constant as is the case with defvar?

不,DEFVAR没有定义常量。

(defvar *var* :value)
(setf *var* 5)

然后:

*var*
=> 5

发生的事情是,当您评估 DEFVAR 表单时,它首先检查符号是否已经绑定(bind)。如果是这种情况,则现有值将保持不变。另一方面,DEFPARAMETER 总是重新初始化变量。

关于lisp - Common Lisp 中 let 定义的变量是否可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41493360/

相关文章:

recursion - Paul Graham 在他的 Bel 引用文献中如何解决 mac 的循环性?

vim - 使用变量设置 Vim 选项

haskell - haskell在lambda中嵌套let

lisp - CUDA 的任何 Lisp 扩展?

ruby - 如何编写解释器?

matrix - 递归 lisp 替换元素迷宫求解器

common-lisp - 我需要一个多合一的 lisp 引用

javascript - 我对 for 循环中的 javascript let 和 var 感到困惑?

lisp - 未理解的常见 Lisp 错误

list - LISP:加入多个列表但不展平