算术运算符存在下prolog中统一的行为

时间:2011-03-16 18:06:27

标签: prolog unification

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版本。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)