2013-08-25 4 views
1

PROLOG가 어떻게 결과를 쿼리에서 찾았는지 시각화하는 것이 합리적입니까? 경로를 통해 무엇을 발견했는지 이해하는 것이 도움이 될 것입니다. 일부 반복 항목 (예 : 패밀리 트리 쿼리에서 상대 항목을 두 번 찾음)PROLOG 해상도 탐색, 시각화?

solve(T):- 
    (T = (A,B) -> solve(A) , solve(B) 
    ; T = (A;B) -> (solve(A) ; solve(B)) 
    ; A). 

우리는 각 단계에 copy_term/2를 사용하고, 차이 목록에 복사 된 용어를 수집 할 수 있습니다

+1

일반적으로 프롤로그 인터프리터에는 디버거가 있으므로 다음과 같이 시작하면됩니다. 자취. –

+0

btw, 아무 것도 깨지 않고 하나 이상의 지점에서 찾기 때문에 반복되는 결과를 제거하는 좋은 방법이 있습니까? 이미 우아하거나 미리 정의 된 것이 없다면 결과 목록을 중복으로 필터링하는 자체 findall을 만들어야한다고 생각합니다. –

+1

은'setof/3'과 (과) 비슷합니까? –

답변

0

AFAICR, 증강 순수한 프롤로그 인터프리터를 가지고있는 표준 방법은 표준 순수 프롤로그 통역을 확대하는 것입니다.

solve(T, [Q|R], Z):- copy_term(T,Q), 
    (T = (A,B) -> solve(A,R,S) , solve(B,S,Z) 
    ; T = (A;B) -> (solve(A,R,Z) ; solve(B,R,Z)) ; 
    ; A, copy_term(A,Q), R=Z). 

solve(AQuery, PathTaken, [])이라고 부를 수 있습니다.

테스트되지 않았습니다.

0

시뮬레이트 작업을 수행하기 위해 prolog-graph 만 찾을 수 있지만 아직 시도하지 않았습니다. 저자는 이 "주어진 Prolog 쿼리에 대한 해상도 트리 이미지를 생성합니다"라고 주장합니다.