質問

私は最近、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.
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top