我是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必须打印所有汽车,因为所有汽车都匹配)。
答案 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