2

私は最近Prologについて学び、中置演算子を定義するために使用される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

結果は私に違いを示さなかった。

4

2 に答える 2

5

演算子の「タイプ」は、結合性を制御します。たとえば、式「5 - 4 - 3」を「(5 - 4) - 3」と解釈するかどうか (左結合性または「5 - (4 - 3)」と呼ばれます) "、これは正しい結合性です。

マイナス演算子が通常どおりに機能する必要がある場合は、左結合にする 'yfx' として定義する必要があります。「xfx」や「xfy」などの他のタイプは、これのバリエーションです。詳しくはhttp://www.cse.unsw.edu.au/~billw/cs9414/notes/prolog/op.htmlを参照してください。

于 2012-02-18T11:46:58.603 に答える
2

Prolog が ISO に準拠している場合は、write_canonicalを使用して、演算子の優先順位と結合性の影響を分析できます。例えば

?- write_canonical(1+2*3).
+(1,*(2,3))
true.
于 2012-02-18T13:35:57.660 に答える