在ProLog中获取false而不是true

时间:2013-06-30 15:14:04

标签: prolog logic

我在商店里有一个产品信息数据库,如下所示:product(Barcode, ProductName, Category, Refrigerated, VendorName)

我正在尝试编写(非常)基本操作来检查两个产品是否具有相同的条形码。

我的代码:

sameCode(product(code1,_,_,_,_),product(code2,_,_,_,_)):- code1=code2.

然而在检查时我得到了:

52 ?- sameCode(product(972000456745, matches, 05, false, fire_ltd),product(972000456745, lighter,        05, false, fire_ltd)).
false.

所以我试着告诉它总是返回true,将它作为一个没有要求的陈述:

sameCode(product(code1,_,_,_,_),product(code2,_,_,_,_)).

但我还是false。任何想法为什么会发生?

1 个答案:

答案 0 :(得分:6)

这是因为code1& code2atoms,因为你没有传入原子code1& code2,它不匹配并返回false。您希望variables(以大写字母或下划线开头)代替:

sameCode(product(Code1,_,_,_,_), product(Code2,_,_,_,_)) :- Code1 = Code2.

这可以简化为:

sameCode(product(Code,_,_,_,_), product(Code,_,_,_,_)).

因为Code当然是与自己统一的。