在Prolog中定义了两个运算符:
op(100, xfy, #).
op(100, fy, ϴ).
表达式是什么
a # ϴ b # c
相当于?
a # ϴ (b # c)
或者
a # ((ϴ b) # c)
为什么?
答案 0 :(得分:4)
您可以使用write_canonical/1
:
?- 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
表示仿函数的位置,而x
和y
表示参数的位置。y
应该被解释为“在这个位置上,一个优先级低于或等于仿函数优先级的术语”。 对于x
,参数的优先级必须严格降低。
使用fy
会导致@(b # c)
而不是(@b) # c
的优先分组。