在Prolog中定义运算符

时间:2017-05-20 15:55:35

标签: prolog

在Prolog中定义了两个运算符:

op(100, xfy, #).
op(100, fy, ϴ).

表达式是什么

a # ϴ b # c

相当于?

a # ϴ (b # c)

或者

a # ((ϴ b) # c)

为什么?

1 个答案:

答案 0 :(得分:4)

您可以使用write_canonical/1

查看Prolog将使用它做什么
?- op(100,xfy,#).
true.

?- op(100,fy,@).
true.

?- write_canonical(a # @ b # c).
#(a,@(#(b,c)))
true.

所以,看来你的第一个推测是正确的。 a # @ b # c的解释是a # (@(b # c))documentation for op/3对此的重要评论是:

  

f表示仿函数的位置,而xy表示参数的位置。 y应该被解释为“在这个位置上,一个优先级低于或等于仿函数优先级的术语”。   对于x,参数的优先级必须严格降低。

使用fy会导致@(b # c)而不是(@b) # c的优先分组。