3
12 ?- 3+4*5 = X+Y.
X = 3,
Y = 4*5.

13 ?- 3+4*5 = X*Y.
false.

16 ?- 3*4+5 = X*Y.
false.

我期待

13 ?- 3+4*5 = X*Y.
X = 3+4, Y = 5.

16 ?- 3*4+5 = X*Y.
X = 3, Y = 4+5.

是否存在一些“优先级”问题?我正在使用最后一个 swi-prolog 版本。

4

2 回答 2

3

是的,您需要考虑一个优先级问题。

Prolog 将数字优先级值附加到每个定义的运算符,以便其解析可以自动处理,例如,3+4*5,就像括号用于状态 3+(4*5) 一样。

所以你的第一个例子按预期工作,但不是第二个或第三个。根本没有办法统一条款,所以 Prolog 返回 false。

于 2011-03-16T18:13:11.917 回答
1

是的,这是关于它的东西

每个运算符都有优先级。+ 的优先级为 500,* 的优先级为 400

于 2011-03-16T18:12:21.850 回答