我正在对约束逻辑编程进行一些修改,并想知道如何读取以下查询以便正确预测其结果。
基本上有一个问题,询问以下查询提供的答案是否正确。
这就是问题
Consider the following queries and answers. Some answers coincide
with what SWI-Prolog would infer whereas others are erroneous.
Indicate which answers are genuine and which ones are fake (no
explanation is required).
(i) ?- [X, Y, Z] ins 0 .. 4, X #= Y + 1.
X in 1..4, Y in 0..3, Z in 0..4.
(ii) ?- [X, Y, Z] ins 0 .. 4, X #= Y + Z.
X in 0..4, Y in 0..2, Z in 0..2.
(iii) ?- [X, Y, Z] ins 0 .. 4, X #= Z - Y.
X in 0..4, Y in 0..4, Z in 0..4.
(iv) ?- [X, Y, Z] ins 0 .. 4, X #= Y * Y, Z #= -Y.
Y = 0, Z = 0.
我的问题是阅读查询以确定答案是否正确的最佳方式是什么。
最佳答案
几个步骤:
- 显示的答案是否是语法上有效的 Prolog 目标?如果不是,那么答案肯定是假的,因为实际的顶层仅发出语法上有效的剩余目标。
- 继续:原始查询是否存在被显示的剩余目标排除的解决方案?如果是(= 不完整性),那么答案是假的,因为实际的顶层仅发出与原始查询语义等效的剩余目标。
- 相反,剩余目标是否承认初始查询不承认的解决方案?如果是(=过于笼统),那么答案就是假的。练习:为什么?
就您的情况而言,显示的答案是语法上有效的连词,因此它绝对是正确解决方案的候选者。但是,答案承认了原始查询没有的解决方案(练习:哪个?),因此答案不正确。
关于prolog - 如何确定约束逻辑编程的查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37148350/