Common lisp CLOS:将符号转换为访问器
我想这是一个真正的初学者问题,但我在这里找不到答案。 我的问题:我想这样设置一个类的槽的值:Common lisp CLOS:将符号转换为访问器,common-lisp,symbols,accessor,clos,Common Lisp,Symbols,Accessor,Clos,我想这是一个真正的初学者问题,但我在这里找不到答案。 我的问题:我想这样设置一个类的槽的值: (setf (accessor class) value) 我为此编写了一个小函数: (defun set-class-slots (class slot value) (setf (slot class) value)) 我在for循环中使用它,在这个循环中,我迭代2个列表(槽(符号列表)和值(数字列表)),并希望将实例的几个槽设置为值 (loop for slot in slots
(setf (accessor class) value)
我为此编写了一个小函数:
(defun set-class-slots (class slot value)
(setf (slot class) value))
我在for循环中使用它,在这个循环中,我迭代2个列表(槽(符号列表)和值(数字列表)),并希望将实例的几个槽设置为值
(loop for slot in slots for value in values do
(set-class-slots <myclass> slot value)
)
(插槽中的插槽循环值中的插槽循环值do
(设置类槽槽值)
)
我得到的错误是:
“形式为((setf插槽)#:| Store-Var-773597 | 3598)的未定义运算符(setf插槽)。”
我认为问题在于函数中的setf没有使用为输入参数“slot”提供的值,而是将“slot”作为运算符读取
我尝试了不同的方法,比如符号函数,funcall等等,但我不知道该怎么做,因为我也不知道到底出了什么问题
任何帮助都将不胜感激
谢谢,
Marleynoe您可以使用来获取(setf XXX)
函数的函数值:
(defun set-class-slots (class slot value)
(funcall (fdefinition `(setf ,slot)) value class))
您不使用
SLOT-VALUE
的任何原因?我在基于lisp的环境中工作,对于我需要修改的类,SLOT-VALUE不起作用(即SLOT保持不变)。这是什么环境?它是常见的lisp实现吗?如果不是,请相应地更新问题的标记。