lisp clos访问器问题

时间:2014-03-05 19:59:12

标签: lisp common-lisp sbcl clos

当类在列表中时,我不能使用clos访问器函数。

说我上课了:

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

我做了2个实例:

(defparameter b (make-instance 'a :a 1))
(defparameter c (make-instance 'a :a 2))

然后如果我想创建一个函数来获取每个实例的值,而在列表中我会这样做

(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。

由于

1 个答案:

答案 0 :(得分:5)

如果您阅读错误,则会得到解释。

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创建包含已评估参数的列表。