2012-04-25 2 views
0

XSB 설명서에는 수동 볼륨 2 섹션 1.16.5의 힙 데이터 구조 라이브러리에 대한 단락이 있습니다. 그러나 출처 나 버전 기록 또는 Google을 통해 도서관의 흔적을 발견 할 수는 없습니다. 이 라이브러리가 실제로 존재한다면 어떤 아이디어라도 있습니까?XSB Prolog의 heaps.P 라이브러리는 어디에 있습니까?

내가 가진 유일한 단서는 logtalk에있는 도서관으로 동일한 원본에서 출처가 분명합니다. 하지만 프롤로그와 협력 중이기 때문에 로그 토크를 프롤로그로 다시 가져와야 할 것입니다.

답변

1

당신은 또 다른 라이브러리로 (또는 다른 지원 프롤로그 컴파일러) XSB에서 Logtalk를 사용하고 일반 프롤로그에서 자원을 호출 할 수 있습니다 또는 프롤로그 모듈로부터. Logtalk의 힙 라이브러리 지원에 관해서는 실제로 원래의 Richard O'Keefe 코드를 기반으로하지만 (설명서에 명시된대로) 최소 힙과 최대 힙을 모두 제공하도록 향상되었습니다. 힙 인터페이스는 예를 들어 브라우징 될 수있다. 여기 :

http://logtalk.org/library/heapp_0.html

http://logtalk.org/library/heap_1.html

간단한 사용 예 :

?- heap(<)::(new(Heap), insert_all([1-a,4-d,2-b,5-e,6-f,3-c,7-g], Heap, UpdatedHeap), top(UpdatedHeap, Key, Value)). 
Heap = t(0, [], t), 
UpdatedHeap = t(7, [], t(1, a, t(3, c, t(5, e, t, t), t(4, d, t, t)), t(2, b, t(6, f, t, t), t(7, g, t, t)))), 
Key = 1, 
Value = a. 

?- heap(>)::(new(Heap), insert_all([1-a,4-d,2-b,5-e,6-f,3-c,7-g], Heap, UpdatedHeap), top(UpdatedHeap, Key, Value)). 
Heap = t(0, [], t), 
UpdatedHeap = t(7, [], t(7, g, t(4, d, t(1, a, t, t), t(3, c, t, t)), t(6, f, t(2, b, t, t), t(5, e, t, t)))), 
Key = 7, 
Value = g. 

하나주의, 그러나. ::/2 호출은 Logtalk 오브젝트 (또는 Logtalk 카테고리) 내에서 작성된 경우에만 일반 Prolog와 비교하여 성능을 제공합니다. 최상위 인터프리터 또는 Prolog 모듈 내에서 쿼리가 해석되어 (컴파일시 메시지가 해석되는) 컴파일되는 대신 메시지가 런타임에 해석된다는 의미입니다. 성능 적중 여부는 애플리케이션에서 의미가 있는지 여부 만 알 수 있습니다 (용어 확장을 지원하는 Prolog 컴파일러에서는 모듈 내에서의 ::/2 호출에 대한 성능 저하를 쉽게 줄일 수 있음).