Prolog运算符优先级和规则匹配

时间:2009-04-20 10:58:28

标签: prolog operator-precedence

我的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

这个解释是否正确?

1 个答案:

答案 0 :(得分:4)

是的,这是正确的。

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

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