Prolog Infix演算子の定義
-
27-10-2019 - |
質問
私は最近、Prologについて学んでおり、Infixオペレーターを定義するために使用される3つのタイプが混乱していることがわかります。
オペレーターのタイプを指定する際のXFX、XFY、YFXの違いは何ですか?私はこの問題についてグーグルで検索しましたが、何も役に立つものが見つかりませんでした。
Prologで次のコードを入力してみました。
:- op(500,yfx,is_alive).
is_alive(A,B) :- display([A,B]).
:- op(500,xfy,is_alive2).
is_alive2(A,B) :- display([A,B]).
:- op(500,xfx,is_alive3).
is_alive3(A,B) :- display([A,B]).
および出力:
| ?- 1 is_alive 2.
'.'(1,'.'(2,[]))
yes
| ?- 1 is_alive2 2.
'.'(1,'.'(2,[]))
yes
| ?- 1 is_alive3 2.
'.'(1,'.'(2,[]))
yes
結果は私に違いを示しませんでした。
解決
演算子の「タイプ」は、関連性を制御します。 「これは正しい関連性です。
マイナス演算子が通常予想どおりに機能する必要がある場合、左結合する「YFX」として定義する必要があります。 「XFXおよび「XFY」などの他のタイプは、これに関するバリエーションです。詳細をご覧ください http://www.cse.unsw.edu.au/~billw/cs9414/notes/prolog/op.html.
他のヒント
あなたのプロログ語がISOに準拠している場合、あなたは使用できます write_canonical 演算子の優先順位と連想性の影響を分析します。例えば
?- write_canonical(1+2*3).
+(1,*(2,3))
true.
所属していません StackOverflow