私は Prolog を使い始めたばかりで、次のコードが期待どおりに機能しない理由がわかりません。リスト L2 が L1 に含まれている場合に true を返す述語を作成しようとしています。これは私が書いたものです:
assert(contains (L1, L1)).
assert(contains(L1, [X|L2]):-member(X, L1), contains(L1, L2)).
assert(contains(L1, [])).
これは、「'L3=X|L2' の X が L1 にあり、L2 が L1 にある場合は true」と同等であり、contains(L1, L2) は、すべてのメンバーがトラバースされるまで再帰的に変換されると考えました。最後のオプションが残っています。そうしないと、L1 にないメンバーが見つかり、述語が失敗します。
残念ながら、そのようには機能しないようです。member(X, L1) の値のみを返すように見えるので、contains([1,2,3],[1,4,5]) はパスしますが、contains([1,2,3],[4, 1,5]) しません。
私は何を間違っていますか?