ツリーを取得してリストのリストを返す述語(Prolog)を作成したいのですが、各リストはツリーパスです。ツリーはtree(Root、LeftTree、RightTree)として定義されます。何か提案はありますか?
質問する
489 次
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 に答える