gpt4 book ai didi

lisp - 什么是 lisp 中 set 的非破坏性版本?

转载 作者:太空宇宙 更新时间:2023-11-03 18:40:30 25 4
gpt4 key购买 nike

我希望能够说 (defvar xy) 并将其绑定(bind)到绑定(bind)到 x 的符号而不是 x,但是 defvar 只会将它绑定(bind)到符号 x,这太糟糕了。如何在不默认将其添加为符号属性的情况下执行此操作?

最佳答案

您可以使用 symbol-value 访问器:

CL-USER> (defvar *sym* 'abc)
*SYM*
CL-USER> (setf (symbol-value *sym*) 100)
100
CL-USER> abc ;non-ANSI-portable, since ABC is undeclared
100

请注意,这会设置符号的 value cell ,这与其动态绑定(bind)相同,因此为了可移植地访问它,您需要始终使用 symbol-value 或(本地或全局)声明变量特殊。您可以像这样在本地执行此操作:

CL-USER> (locally (declare (special abc))
(+ abc 3))
103

或全局使用 defvar(不推荐用于非耳罩符号):

CL-USER> (defvar abc)
ABC

(不过,我知道没有 CL 实现实际上需要这个。您通常可以安全地假设默认情况下假定未声明的变量是特殊的。)

关于lisp - 什么是 lisp 中 set 的非破坏性版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7632694/

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