【问题标题】:Prolog operator precedence and rules matchingProlog 运算符优先级和规则匹配
【发布时间】:2009-04-20 10:58:27
【问题描述】:

我在我的 prolog 解释器中加载了接下来的两个事实:

foo(U+V,1).
foo(U*V,2).

现在我尝试使用该结果进行下一个查询:

foo(x*x+x,R).  -->  R = 1
foo(x+x*x,R).  -->  R = 1
foo(x*x*x,R).  -->  R = 2

现在我尝试下一个查询:

foo(x*x-x,R).  -->  no

据我了解,这可以通过运算符优先级如何构建树表达式来解释:

x+x*x  -->  +           so it matches with  -->  +
           / \                                  / \
          x   *                                U   V
             / \
            x   x

x-x*x  -->  -           DOES NOT matches any fact.
           / \                             
          x   *                                
             / \
            x   x

这个解释正确吗?

【问题讨论】:

    标签: prolog operator-precedence


    【解决方案1】:

    是的,这是正确的。

    默认运算符优先级被定义为自然的,即使用正常的数学优先级。但如果你不喜欢,你可以重新定义它。

    改变优先级是否是一个好主意是另一回事,它有效地改变了 Prolog 的语法并可能导致解析问题。特别是如果您更改 Prolog 语法的运算符优先级,优先级高于 1000。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      • 2011-06-21
      • 2020-03-05
      • 1970-01-01
      • 2011-01-09
      相关资源
      最近更新 更多