Greg Pfeil의 Class Hierarchy 다이어그램은 Common Lisp 유형 시스템의 포괄적 인 그림을 제공합니다. 하지만 계층 구조 맨 위의 클래스 관계를 더 잘 이해하려고합니다. 간단한 예제의 경우 (defstruct person name age)
을 입력 한 다음 (defparameter *p1* (make-person :name "Yosh" :age 19)
을 입력하십시오. 이제Common Lisp 클래스 계층 구조
(typep *p1* 'person)
T
(typep *p1* 'structure)
T
(typep *p1* 'structure-object)
T
(typep *p1* 'atom)
T
(typep *p1* t)
T
Hyperspec는
structure-object
에 대한 우선 순위 목록은 자체t
말합니다.atom
및structure
은 계층 구조에없는 유형입니까?t
의 직접 하위 유형은 모두 무엇입니까? 보다 일반적으로, 시행 착오없이 주어진 유형의 모든 직접 부속 유형 또는 수퍼 유형을 검색하는 방법은 무엇입니까?subtypep
? 또는 모든 유형의 목록을 반복 할 수있는 방법이 있습니까? MOP가 모든 하위/수퍼 클래스에 참여할 수있는 기능을 제공합니까?집합 이론과 유사하게 모든 Common Lisp 유형/클래스는 이론적으로
t
의 두 하위 클래스로 세분 될 수 있습니다. 즉,standard-object
는 (숫자 3, 문자열 "ABC"구조 (S1)에있어서의 M1, 등과 같은 인스턴스 요소에 대응), 및standard-class
(클래스standard-object
같은 인스턴스 세트 대응 클래스number
, 클래스structure-object
등). 이것이 실제 서브 분할이t
이 아닌 경우, 이유는 실제 구현과 관련이 있습니다. 예를 들어 계층 구조에서 재귀 클래스 관계를 피할 수 있습니까?
모든 클래스에는 해당 유형이 있으므로 하위 유형뿐만 아니라 하위 유형도 테스트하려면'subtypep '을 사용할 수 있다고 가정하십시오. 마찬가지로'class-of'를 사용하여 실제 클래스 객체에 액세스해야하는 경우'type-of'을 사용하여 객체 유형 (기본 또는 닫음)을 검색 할 수 있습니다. – davypough