2012-02-18 17 views
2

最近、Prologについて学習しています。中置演算子を定義するために使用される3つの型が混乱しています。Prologの中置演算子の定義

演算子の型を指定するときのxfx、xfy、yfxの違いは何ですか? 私はこの問題について捜したことがあり、役に立たないものは何も見つかりませんでした。

Iは、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 

結果は私に差を示さなかったし。

答えて

3

オペレータの 'タイプ'は、結合性を制御します。式 "5-4-3"を左結合性として知られている "(5-4)-3"または右結合性である "5-(4-3)"と解釈すべきかどうか。

マイナス演算子が通常期待どおりに動作する必要がある場合は、左結合型にするために 'yfx'と定義する必要があります。 'xfxと' xfy 'のような他の型は、これに関するバリエーションです。 http://www.cse.unsw.edu.au/~billw/cs9414/notes/prolog/op.htmlで詳細をご覧ください。

+0

ありがとうございました! – JasonLi

+2

あなたの演算子ごとに(1 is_alive 2 is_alive 3)してみてくださいと違いが表示されます – DaveEdelstein

2

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

?- write_canonical(1+2*3). 
+(1,*(2,3)) 
true. 
関連する問題