CLOS 오브젝트 (표준 클래스)를 비교하기 위해 Common Lisp에 내장 된 항등 연산자가없는 이유가 궁금합니다. 예를 들어, "equalp"는 배열, 구조체, 해시 테이블에 적용될 수 있지만 객체에는 적용될 수 없습니다.CLOS 오브젝트 비교
나는 객체를 강하하고 슬롯 값이 equalp가 프로그래머에 의해 쓰여질 수 있는지를 검사하지만, 표준에 포함되지 않는 이유가 있는지 궁금하다. 할 공통점은? 예를 들어, "make-hash-table"에 대한 테스트 함수가 기본 제공 * 중 하나 여야합니다. 따라서 해시 테이블에서 객체를 키 또는 값으로 사용하는 방법을 실제로 볼 수 없습니다.
* 관련 질문 (Using Common Lisp CLOS objects as keys in a hashtable?)이 있음에도 불구하고 실제로 내 질문에는 대답하지 않았습니다.
감사와 환호!
M
예 : http://www.nhplace.com/kent/PS/EQUAL.html –
일반적으로 두 개의 개체를 비교하는 경우 해당 개체가 동일한 개체인지 확인해야합니다 'EQ' (해시 테이블과 함께 작동), 또는 특정 슬롯이 동일한 지 확인하고 싶다면 당연히 자신 만의 비교 함수를 작성해야합니다. – jkiiski
MOP을 사용하면 클래스 인스턴스 (예 :'STANDARD-OBJECT')를 제외한 모든 것에 대해'EQUALP'를 수행하고 모든 슬롯에서'EQUAL? '을 수행하는 일반적인 동등성 테스트를 작성할 수 있습니다 객체가 같은 클래스에 먼저 속하고 바운드가 있는지 확인해야합니다. 천천히,하지만 아마도 당신이 원하는 건 99 %의 경우에, – mobiuseng