2012-04-08 7 views
1

ツリーをとり、リストのリストを返す述語(Prolog)を作成したいと思います。各リストはツリーパスです。ツリーは tree(Root、LeftTree、RightTree)と定義されています。 提案はありますか?リストのリストのツリーパス

答えて

4

これはかなり珍しいです多分このように、(ツリーとDCGsが良いフィット感であるため、すべてのノードのフラットなリストとの関係のために、たとえば依頼する方が一般的です):

tree_list(nil, []). 
tree_list(tree(Node,Left,Right), [Lefts,Node,Rights]) :- 
     tree_list(Left, Lefts), 
     tree_list(Right, Rights). 

例:

?- tree_list(tree(a,tree(b,nil,tree(d,nil,nil)),tree(c,nil,nil)), Ts). 
Ts = [[[], b, [[], d, []]], a, [[], c, []]]. 

この表現は(不必要な無駄な(?あなたはすべての非空のリストは、3つの要素を持っているだろうことを知っているので、なぜリストの代わりに三元用語を使用していない)と私の意見ではありますので、すでに最初にツリー表現をしている)が、それが何のために良いのかを知っている。 ..

関連する問題