Prolog中缀运算符定义

Prolog中缀运算符定义,prolog,iso-prolog,infix-operator,Prolog,Iso Prolog,Infix Operator,我最近学习了Prolog,我发现用于定义中缀运算符的三种类型令人困惑 在指定运算符类型时,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

我最近学习了Prolog,我发现用于定义中缀运算符的三种类型令人困惑

在指定运算符类型时,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

结果对我来说没有什么不同。

运算符的“类型”控制关联性,例如,表达式“5-4-3”应解释为“(5-4)-3”,即左关联性还是“5-(4-3)”,即右关联性


如果减号运算符应该像通常预期的那样工作,则需要将is定义为“yfx”,从而使其左关联。“xfx”和“xfy”等其他类型都是此版本的变体。有关详细信息,请参见。

如果Prolog符合ISO标准,则可以使用分析运算符优先级和关联性的影响。比如说

?- write_canonical(1+2*3).
+(1,*(2,3))
true.
尝试为每个操作符执行(1是活动的2是活动的3),您将看到不同