私は私が初めてであるいくつかのプロローグに取り組んでいます。
「または」演算子を探しています
registered(X, Y), Y=ct101, Y=ct102, Y=ct103.
これが私の質問です。私が書きたいのは、次のようなコードです。
「Yが値ZOR値QOR値Pに等しい場合、Xを返します」
ただし、Yが3つすべてに等しい場合は、Xを返すように求めています。ここのor演算子は何ですか?ありますか?
ちょうど別の視点。Prolog で「or」を実行するには、「分離」演算子またはセミコロンを使用することもできます。
registered(X, Y) :-
X = ct101; X = ct102; X = ct103.
より完全な説明については:
Y
この方法で代替バインディングを「呼び出す」ことができます。
...registered(X, Y), (Y=ct101; Y=ct102; Y=ct103).
正しい実行制御フローを維持するには、括弧が必要であることに注意してください。/2は;
一般or
演算子です。使用が制限されている場合は、より慣用的なものを選択することもできます
...registered(X, Y), member(Y, [ct101,ct102,ct103]).
バックトラックすると、 Y がリストの各メンバーにバインドされます。
編集私はあなたの最後の要件を遅れて理解しました。Y を 3 つの値すべてに一致させたい場合は、 or が不適切であり、代わりに使用します
...registered(X, ct101), registered(X, ct102), registered(X, ct103).
またはよりコンパクト
...findall(Y, registered(X, Y), L), sort(L, [ct101,ct102,ct103]).
findall/3 は、registered/2 が成功したのとまったく同じ順序でリストを作成します。次に、並べ替えを使用して一致を確認します。
...setof(Y, registered(X, Y), [ct101,ct102,ct103]).
setof/3 も結果リストをソートします