ISO Prolog で、線形時間で実行される変数の 2 つのリストの共通部分の (メタ論理) 述語を定義する方法は? 変数は、決まった順序で表示されます。変数の「年齢」のような実装依存のプロパティは、結果に影響を与えてはなりません。
に類推してlibrary(ordsets)
、関係を呼び出しましょうvarset_intersection(As, Bs, As_cap_Bs).
?- varset_intersection([A,B], [C,D], []).
true.
?-varset_intersection([A,B], [B,A], []).
false.
?- varset_intersection([A,B,C], [C,A,D], Inter).
Inter = [A,C].
or
Inter = [C,A].
?- varset_intersection([A,B],[A,B],[A,C]).
B = C
or
A = B, A = C
?- varset_intersection([A,B,C],[A,B],[A,C]).
idem
つまり、3 番目の引数は出力引数であり、最初の 2 つの引数の共通部分と一致します。
現在の ISO 標準 (Cor.2 を含む ISO/IEC 13211-1:1995 )のビルトインのリストを参照してください。
(注意してください、私は数年前に別の質問の過程でこの質問に答えました。しかし、それは非表示のままであり、Google には表示されません。)