2012-08-29 2 views
1

목록에 트리 구조를 추가하려고합니다. Erlang에서는 ++ 연산자를 사용하여 추가 할 수 있지만 Prolog에서이 작업을 수행 할 때 구문 오류가 계속 발생합니다.바이너리 힙 목록에

필자가 생각하기에 부족한 목록을 추가하는 것과 관련하여 모두 내 오류 코드가 포함됩니다.

tree2list(leaf(X),L++[X]). 
tree2list(branch(Branch1,Branch2),L):- 
tree2List(B1,L1), 
tree2List(B2,L2), 
L++L1++L2. 

아이디어를 추가하는 방법은 무엇입니까?

+1

프롤로그에는'++ '연산자가 없습니다. 'append/3'을 사용하십시오. Prolog는 Erlang과 매우 표면적으로 비슷합니다. 당신은 좋은 프롤로그 책을 더 잘 얻을 것입니다. –

답변

1

물론, 사용의 차이 목록 :

tree2list(leaf(X),[X|A]-A). 
tree2list(branch(B1,B2),L-Z):- 
     tree2list(B1,L-A), 
     tree2list(B2,A-Z). 

/* 7 ?- tree2list(branch(leaf(1),leaf(2)), L-[]). 
L = [1, 2] ; 
No 
8 ?- */ 

하지만 당신의 나무가 비어있는 지점을 가지고하지 않는 것 같습니다. 따라서이를 추가하십시오 :

tree2list(empty,A-A). 

/* 10 ?- tree2list(branch(branch(leaf(1),leaf(2)),empty), L-[]). 
L = [1, 2] ; 
No 
11 ?- */ 
+0

내 나무에 나뭇 가지가 없다는 것에 동의하지만, 지금까지 고려하지 않았습니다. 이것을 처리하는 방법에 대한 힌트가 있습니까? – Anticipating

+0

브랜치 (리프 (A), 브랜치 (AA), 리프 (AAA))와 같은 treestructure가있는 경우 L = [A, AA, AAA | _G6667] -_ G6667 인 것처럼 보입니다 A 참조는 "오류"를 출력합니다. – Anticipating

+0

맞아, 내가 어떻게 불렀는지 주목해라 :'tree2list (...., L - [])'. Prolog에 익숙하지 않다면 차이점은 진입 재료가 아닙니다. 그 죄송합니다. –