ツリーをリストに変更する方法について、別の投稿の誰かのコメントから提案を試しました。ただし、どこかに(または何か)宣言されていない変数があるため、リストの値は[5、2、6]ではなく[_G667、_G673、_G679]であり、これが正解です。私の知る限り、すべての操作は正しいです。
コードは次のとおりです。
flatten( Item , []).
flatten( tree(Left, Val, Right), List) :-
flatten(Left, List1),
append(List1, [E], List2),
flatten(Right, List3),
append(List2, List3, List).
私が使用したクエリは次のとおりです。
?- flatten(tree(tree(nil, 2, nil), 5, tree(nil, 6, nil)), L).
誰かが変数の問題を見ていますか?最初の行(Itemを含む)にあるのではないかと思いましたが、Itemをitemに変更すると、クエリはすぐにfalseを返します。
私はいくつかのPrologプログラムを書いただけなので、これはまだ私にとって新しい概念です。