私は初めてのプロローグに取り組んでいます。
「または」演算子を探しています
registered(X, Y), Y=ct101, Y=ct102, Y=ct103.
これが私のクエリです。私が書きたいのは次のようなコードです:
「Yが値Z OR value Q OR value P」に等しい場合、Xを返す
ただし、Yが3つすべてに等しい場合はXを返すように求めています。ここのor演算子は何ですか?あるの?
この方法でY
の代替バインディングを「呼び出す」ことができます。
...registered(X, Y), (Y=ct101; Y=ct102; Y=ct103).
正しい実行制御フローを維持するには、括弧が必要であることに注意してください。 ;
/2それは一般的なor
演算子です。制限された使用のために、より慣用的な
...registered(X, Y), member(Y, [ct101,ct102,ct103]).
バックトラッキングで、Yをリストのeachメンバーにバインドします。
編集あなたの最後の要件を少し遅れて理解しました。 Yが一致するall3つの値または不適切な場合は、代わりに使用します
...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は結果リストもソートします
ちょうど別の視点。 Prologで「または」を実行するには、「disjunct」演算子またはセミコロンを使用することもできます。
registered(X, Y) :-
X = ct101; X = ct102; X = ct103.
より詳細な説明: