私はPrologコードを書こうとしていますが、これを真に戻すことはできません。私はすべての要素が2つの他のリストに含まれるリストを見つけようとしています。例えば、すべてのリストAの要素は、BとCのリストにあります。 マイPrologのコードは次のとおりです。要素がリストにある場合はメンバーの述語がtrueを返すプロローグ内のこの行がfalseを返すのはなぜですか?
member(X, [X|_]).
member(X, [_|T]) :-
member(X, T).
first([H0|T0], [H0|T1], A) :-
member(H0, A),
first(T0, [H0|T1], A).
first([H0|T0], [_|T1], A) :-
first([H0|T0], T1, A).
。述語 'first'を使用して、メンバーリストを使用して、CリストのAとBの一致する要素を検索しようとしています。私が見つけたら、さらに最初のリストに行き、その最初の要素を2番目のリスト要素と比較し、再び一致させると、3番目のリストでそれを見つけることができます。私はそれが叶うことを願っていますが、私が走るときに
?- first([4, 6, 4], [4, 5, 6, 4], [1, 2, 4, 6]).
それは偽を与えて、私は理由を理解できません。これは単純な注意間違いのように思われますが、私はその周りに頭を浮かべることはできません。
あなたは空のリストのための基本ケースが欠けているように見えます。 –