2014-03-05 2 views
1

클래스가 목록에있을 때 클로우즈 액세서 함수를 사용할 수 없습니다. 나는 각각의 인스턴스의 값을 얻을 것 함수를 작성하기를 원한다면 다음lisp clos 접근 자 문제

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

과 :

(defclass a() 
    ((a :accessor a 
     :initarg :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 대신에 루프와 다른 것들을 사용해 보았습니다.

감사합니다.

+0

'(get-a '(b c))가 아닌'(get-a (list b c))'입니다. –

답변

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)은 두 개의 기호 목록입니다. 2 개의 CLOS 인스턴스 목록을 작성하려고했을 것입니다. 평가 된 인수가있는 목록을 만들려면 LIST을 사용하십시오.

+0

그게 고쳐, 고마워. – mondoman712