2013-10-03 1 views
5
CL-USER> (defclass a()()) 
CL-USER> (defclass b (a)()) 
CL-USER> (make-instance 'b) 
#<STANDARD-CLASS B> 

Какую функцию предиката можно вызвать в моем экземпляре b, который возвращает T, если он был унаследован от? В духе:Эквивалентность instanceof для CLOS? Как проверить, наследуется ли экземпляр от другого объекта?

CL-USER> (instanceof 'a *) 
T 

ответ

8

класса имена также имена типов, так:

(typep * 'a) 

См Интеграция Типы и классы: http://clhs.lisp.se/Body/04_cg.htm

Или вы могли бы сделать это:

(defmethod is-an-a-p ((x a)) 
    t) 
(defmethod is-an-a-p ((x t)) 
    nil) 
Смежные вопросы