prolog规则中的比较问题

时间:2018-05-25 11:14:51

标签: prolog

我是Prolog的新人,我创造了一个小基地机智" car"语句。

car(ford, mondeo, 125600, 31000).
car(ford, mondeo, 111232, 35000).
car(renault, megane, 82000, 28000).
car(renault, laguna, 102000, 35000).
car(renault, laguna, 82000, 42000).
car(www, pasat, 82000, 42000).
car(renault, aaa, 82000, 428900).

如何找到所有带有> 10000第三个参数的汽车?我尝试在consol中编写一个规则(!不在文件中!)?- car(Z,X,C > 10000,V).但我只得到false(但是如何?Prolog必须打印所有汽车,因为所有汽车都匹配)。

1 个答案:

答案 0 :(得分:1)

car(Z,X,C > 10000,V).无效,因为prolog会尝试将每个规则头部与car(Z,X,C > 10000,V).统一起来,并且每个规则头部都会失败。

更详细:

car(ford, mondeo, 125600, 31000)无法与car(Z,X,C > 10000,V)统一,因为125600无法与C > 10000统一。

请务必阅读并理解how unification works

正确的策略是利用回溯过滤结果:您可能已经注意到输入查询car(Z,X,C,V)将返回所有车辆'数据

如果您为此添加了更多目标,则必须在第二个目标失败时返回,并尝试其他选择。

使用proof search继续阅读。

您应该在查询中添加的第二个目标是C>10000

car(Z,X,C,V), C > 10000