Prolog中的操作符优先级

Prolog中的操作符优先级,prolog,Prolog,我正在研究伊凡·布拉特科的书:“人工智能编程” 现在我正在研究运算符,对此我有一些疑问,在这本书上我可以读到以下内容: 所以运算符的优先级决定了表达式的正确解释。例如,表达式a+b*c原则上可以理解为: +(a, *(b,c)) 1.+(a,*(b,c)) 或作为: *(+(a,b), c) 2.*(+(a,b),c) 现在我有了第一个疑问:“这是什么意思?我似乎很困惑,因为这两个表达给出了不同的三个和不同的结果 例如,如果我有:a=2,b=3,c=4 第一个的结果是14,第二个的结果是20

我正在研究伊凡·布拉特科的书:“人工智能编程”

现在我正在研究运算符,对此我有一些疑问,在这本书上我可以读到以下内容:

所以运算符的优先级决定了表达式的正确解释。例如,表达式a+b*c原则上可以理解为:

+(a, *(b,c))
1.
+(a,*(b,c))

或作为:

*(+(a,b), c)
2.
*(+(a,b),c)

现在我有了第一个疑问:“这是什么意思?我似乎很困惑,因为这两个表达给出了不同的三个和不同的结果

例如,如果我有:
a=2
b=3
c=4

第一个的结果是14,第二个的结果是20,所以有不同:不同的thress意味着不同的操作符执行顺序,这意味着不同的结果

所以我认为(使用算术运算符的通常优先级:首先执行乘法,然后执行和)正确的表达式是第一个表达式,第二个表达式是错误的

对吗

继续阅读我还可以阅读的书:

一般规则是具有最高优先级的运算符是该术语的主要函子。如果根据我们的常规约定,要理解包含+和*的表达式,则+的优先级高于*运算符

现在我有第二个疑问:正如我所说的,在算术的常规中,我首先执行乘法,然后执行和,所以在我看来,*运算符有优先权,而没有优先权+

我遗漏了什么?为什么书上说
+
*
具有更高的优先级?

“术语的主要函子”是指要执行的最后一个操作,或前缀符号中最外层的操作。这个定义与你的定义相反,因此矛盾

因此,运算符的顺序决定了表达式的正确解释。例如,表达式
a+b*c
原则上可以理解为:

+(a, *(b,c))
或作为:

*(+(a,b), c)
它说,没有优先权,这是解释表达式的两种可能的方法(不同的解析表达式的方法会给出不同的结果)。只有当您知道
*
应该在
+
之前执行时,您才知道如何对
a+(b*c)
进行分组。(我避免在这里优先解释,因为下面指出这很容易混淆)

+
*
只是符号,它们恰好被用作具有某种已定义优先级的运算符。一般来说,您可以将任何内容定义为运算符,并赋予其优先级

一般规则是,具有最高优先级的运算符是该术语的主要函子。如果根据我们的常规约定,要理解包含
+
*
的表达式,则
+
的优先级高于
*
运算符

在英语中,优先权的定义是“被认为比某人或某事更重要的条件;在重要性、顺序或等级上的优先权”。只要某件事必须发生在其他事情之前,我们就有优先权

在C中,是表达式中绑定的顺序。C中的高优先级运算符将在低优先级运算符之前执行

在Prolog中,是获取函子的顺序,这与C运算符的绑定顺序相反。当我们使用分析表达式时,更高优先级的运算符将出现得更早