Common lisp 将变量的值设置为自评估代码

Common lisp 将变量的值设置为自评估代码,common-lisp,Common Lisp,我在Common Lisp中做了一些测试: (defvar *a* 0) (defvar *b* *a*) (setf *b* 5) *b* ; returns 5 of course *a* ; returns 0. Is there a way to set it to 5 without setting *a* directly, via *b* ? 是否有一种简单的方法可以同时: 将*b*的值设置为一种函数,该函数检查*b*的值是否是符号,如果是,则在此处访问符号的值*a*,依此类推,

我在Common Lisp中做了一些测试:

(defvar *a* 0)
(defvar *b* *a*)
(setf *b* 5)
*b* ; returns 5 of course
*a* ; returns 0. Is there a way to set it to 5 without setting *a* directly, via *b* ?
是否有一种简单的方法可以同时:

将*b*的值设置为一种函数,该函数检查*b*的值是否是符号,如果是,则在此处访问符号的值*a*,依此类推,直到它是一个非符号原子或一个不指向任何东西或指向自身的符号

*b*自我评估很重要,我不想把所有。。。无处不在,并返回非符号原子或…参见上面的定义

这个问题可以重新表述:是否可以将变量设置为函数,以及在计算该变量时如何计算函数?有没有办法强迫和控制自我评价

我认为更改eval函数可能是一个非常糟糕的主意,或者创建一个自定义defvar和自定义setf,但是可能有一个内置的工具来实现这一点吗

我知道可以将*b*设置为lambda*a*之类的函数,但为了代码可读性,我更愿意只使用*b*而不是funcall*b*


注意:我更喜欢非宏解决方案,因为我可以在运行时使用此功能。

我想您正在寻找:


另请参见。

我想您正在寻找:


另请参见。

您想实现一种变量统一吗?@coredump我只是在玩弄这门语言。您想实现一种变量统一吗?@coredump我只是在玩弄这门语言。谢谢,这正是我想要的:谢谢,这正是我想要的
(defvar *a* 1)
(define-symbol-macro *b* *a*)
*b*
==> 1
(setq *b* 5)
*a*
==> 5