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版本。
答案 0 :(得分:3)
是的,您需要考虑优先问题。
Prolog将数字优先级值附加到定义的每个运算符,以便其解析可以自动处理,例如3 + 4 * 5,就像括号已用于状态3+(4 * 5)一样。
所以你的第一个例子按预期工作,但不是第二个或第三个。没有办法统一这些条款,所以Prolog返回了假。
答案 1 :(得分:1)