1

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

4

1 に答える 1

4

これは非常に珍しいことです (たとえば、ツリーとそのすべてのノードのフラットなリストの間の関係を求めるのがより一般的であり、DCG が適しています)、おそらく次のようになります。

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 つの要素があることを知っているので、リストの代わりに 3 項を使用しない理由はありません)。しかし、それが何に役立つかは誰にもわかりません...

于 2012-04-08T19:55:57.000 に答える