0

我正在研究 Ivan Bratko 的书:“人工智能编程”

现在我正在研究运营商,对此我有一些疑问,在书上我可以阅读以下内容:

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

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

或作为:

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

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

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

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

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

这是对的吗?

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

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

现在我有第二个疑问:正如我所说,在算术的正常约定中,我首先执行乘法,然后执行总和,所以我认为 * 运算符具有优先级而不是 +

我错过了什么?那为什么书上说+优先级更高*呢?

4

2 回答 2

1

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

于 2013-03-24T09:41:02.757 回答
1

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

+(a, *(b,c))

或作为:

*(+(a,b), c)

它说没有优先权,这是解释表达式的两种可能的方式(并且解析表达式的不同方式会产生不同的结果)。a + (b * c)只有在知道*应该执行之前才知道分组+。(我避免在这里优先解释,因为它会令人困惑,如下所述)。

+and*只是符号,只是碰巧它们被用作具有某些已定义优先级的运算符。一般来说,您可以将任何东西定义为运算符,并赋予它优先级。

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

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

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

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

于 2013-03-24T10:00:33.050 回答