Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Common lisp CLOS:将符号转换为访问器_Common Lisp_Symbols_Accessor_Clos - Fatal编程技术网

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实现吗?如果不是,请相应地更新问题的标记。