当类在列表中时,我不能使用clos访问器函数。
假设我有a级:

(defclass a ()
  ((a :accessor a
      :initarg :a)))

我举了两个例子:
(defparameter b (make-instance 'a :a 1))
(defparameter c (make-instance 'a :a 2))

如果我想创建一个函数,在列表中为每个实例获取a值
(defun get-a (lst)
  (mapcar #'a lst))

并称之为
(get-a '(b c))

但我做了,我得到一个错误:
There is no applicable method for the generic function
  #<STANDARD-GENERIC-FUNCTION A (1)>
when called with arguments
  (B).
    [Condition of type SIMPLE-ERROR]

如果不是直接用mapcar调用访问器,而是调用包含访问器的函数,也会发生这种情况我也试过用循环和其他东西代替mapcar。
谢谢

最佳答案

如果你读错了,你就会得到解释。

There is no applicable method for the generic function
  #<STANDARD-GENERIC-FUNCTION A (1)>
when called with arguments
  (B).

所以你接到了一个电话,类似于(a 'b)但是b是一个符号,而不是CLOS实例。
(b c)是两个符号的列表您可能想创建一个包含两个CLOS实例的列表使用LIST创建包含计算参数的列表。

关于lisp - Lisp Clos访问器问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22207932/

10-14 19:53