【问题标题】:Defining operators in Prolog在 Prolog 中定义运算符
【发布时间】:2017-05-20 15:55:35
【问题描述】:

在 Prolog 中定义了两个操作符:

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

表达方式是什么

a # ϴ b # c

相当于?

a # ϴ (b # c)

或许

a # ((ϴ b) # c)

为什么?

【问题讨论】:

  • # 是 xfy 类型,所以它是右结合的,不是吗?将上述表达式解释为a # ((ϴ b) # c) 就足够了吗?

标签: prolog


【解决方案1】:

您可以使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多