gpt4 book ai didi

scope - setq 的 Lisp 作用域问题?

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:08 26 4
gpt4 key购买 nike

我是 lisp 的菜鸟,只用了两周左右...

我有一些用 setq 声明的全局变量:(setq myvar '(WHATEVER))

还有一个函数应该修改我告诉它的任何变量:

(defun MYFUN (varname)
(setq varname '(POOP))
)

但是当我打电话时:(MYFUN 'myvar)并检查 myvar 的值,现在它仍然是 (WHATEVER) 如何使在 MYFUN 中所做的更改保持不变?

最佳答案

没有“用 setq 声明一个全局变量”这样的东西,只有“用 setq 设置一个变量的值”,如果你在顶级词法环境中这样做,结果很有趣——定义。

如果您查看变量 varname 包含的内容,它很可能是列表 (poop)

此外,setq 末尾的“q”实际上表示“引用”(即 setq 特殊形式不会计算第一个(和第三个,和第五个...) 参数,但会为第二个(和第四个和第六个...)这样做。

从历史上看,它被用作一种便利,其中 (set (quote var) value) 不如 (setq var value) 方便。但是,(set var value)(setf (symbol-value var) value) 具有完全相同的效果,您应该使用它。

关于scope - setq 的 Lisp 作用域问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35330714/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com