私はリストにツリーを平坦化する次のコード、プロローグのリストをどのように一致させるか?
tree_list(leaf(Leaf)) --> [Leaf].
tree_list(node1(Leaf, Node)) -->
[Leaf],
tree_list(Node).
tree_list(node2(Leaf, Node1, Node2)) -->
tree_list(Node1),
[Leaf],
tree_list(Node2).
tree_list(node3(_, Node1, Node2, Node3)) -->
tree_list(Node1),
tree_list(Node2),
tree_list(Node3).
サンプルクエリと答えがあります:私は二つのリストかどうかを確認するために一致したコードの一部を書いた
?- phrase(tree_list(node3(1,
node1(2, leaf(1)),
node2(3, leaf(1), leaf(1)),
node1(4, leaf(1)))), Ls).
Ls = [2, 1, 1, 3, 1, 4, 1].
を要素のリストは同じです。
treeMatch([], []).
treeMatch([Th| Tt], [Ah| At]) :- Th is Ah, treeMatch(Tt, At).
上記単に彼らは空のリストを打つまで、両方のリストから、各インデックスは同じ要素を持っていることを確認するためにチェックリストを通過します。
treeMatch([2, 1, 1, 3, 1, 4, 1], [2, 1, 1, 3, 1, 4, 1])
でコードを試してみます。
しかし、私は
treeMatch([2, 1, 1, 3, 1, 4, 1], phrase(tree_list(node3(1,
node1(2, leaf(1)),
node2(3, leaf(1), leaf(1)),
node1(4, leaf(1)))), Ls)).
でそれをしようとした場合、私はfalseを取得します。 Lsの値を取得してtreeMatchに直接挿入して動作させる方法はありますか?
リストが同じ要素を持っているかどうかを確認する '' 'TreeMatch'''についてお話します。しかし、 '' ''は ''が '' ''になっていれば '' '' '' ''に評価されます。したがって、treeMatch([2]、[1 + 1]) '' 'は成功しますが、' 'treeMatch(X、foo)' 'も' 'treeMatch(2、X)' ' (最初はfooが算術式でないため、2番目は評価が根拠のある条件でのみ実行できるためです)。これは期待される行動ですか?私の疑惑は、実際には '' 'L1 = L2'''をチェックしたいということです。 –