2016-08-15 1 views
1

임의의 객체를 정점으로 저장할 그래프 데이터 구조를 구현 중입니다. 모든 꼭지점이 키를 가질 수 있도록 객체의 키를 얻는 것과 같은 인터페이스를 정의하고 싶습니다. 내 마음 속에서, 이것은 자바와 같은 언어로 인터페이스를 사용할 수있는 것처럼 들린다.일반적인 lisp로 기술하고 구현하고 인터페이스하는 방법

interface Vertex { 
    String key (Vertex v); 
    // etc... 
} 

공용 lisp에서 인터페이스 동작을 어떻게 에뮬레이트 할 수 있습니까?

+7

mixin과 같은 클래스를 구현하여 원하는대로 일반 함수를 상속하고 정의 할 수 있습니다. CLOS에는 다중 상속이 있습니다. –

답변

5

Rainer Joswig mentioned in the comments으로, 일부 언어에서 사용하는 인터페이스가 없으므로 (예 : Java) 인터페이스를 구현하지 않아도되므로 일부 일반 함수와 선택적으로 mixin 클래스를 정의하여 구현 클래스의 수퍼 클래스로 지정할 수 있습니다 .

+0

내가 생각하기에 재미있는 점은 클래스가 인터페이스를 구현하는지 여부를 확인하는 것입니다. 클래스와는 별도로 메소드가 정의되고 (실제로는 실제로) CLOS와 같은 시스템에서는 클래스의 첫 번째 인스턴스가 만들어 질 때까지 더 많거나 적은 수표를 지연해야합니다. 그러나 검사를하기 위해 MOPpy를 수행하는 것은 쉽지 않습니다. – tfb

+0

@tfb : 일반 함수는 개념을 거꾸로 뒤집습니다. 오히려, 당신은 묻고 싶은데,이 일반적인 방법은 클래스를 포함하는 전문화되어 있습니까? 발견 방법은 그 질문에 답합니다. 예 : (find-method # 'stream-clear-output'() (list (find-class 'stream)) – BRFennPocock

+0

@tfb 믹싱 클래스를 사용하는 것이 중요하다고 생각합니다. (메서드의 기본 구현을 제외하고 사람들은 일반적으로 인터페이스가 아닌 이러한 추상 클래스를 호출합니다.) –

관련 문제