在ProLog中获取false而不是true

1 logic prolog

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

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

我的代码:

sameCode(product(code1,_,_,_,_),product(code2,_,_,_,_)):- code1=code2.
Run Code Online (Sandbox Code Playgroud)

然而,在检查它时,我得到了:

52 ?- sameCode(product(972000456745, matches, 05, false, fire_ltd),product(972000456745, lighter,        05, false, fire_ltd)).
false.
Run Code Online (Sandbox Code Playgroud)

所以我试图告诉它true总是返回,通过使它成为一个没有要求的声明:

sameCode(product(code1,_,_,_,_),product(code2,_,_,_,_)).
Run Code Online (Sandbox Code Playgroud)

但我还是得到了false.任何想法为什么会发生?

And*_*all 6

这是因为code1&code2原子,因为你没有传入原子code1&code2,它不匹配并返回false.您需要变量(以大写字母或下划线开头):

sameCode(product(Code1,_,_,_,_), product(Code2,_,_,_,_)) :- Code1 = Code2.
Run Code Online (Sandbox Code Playgroud)

这可以简化为:

sameCode(product(Code,_,_,_,_), product(Code,_,_,_,_)).
Run Code Online (Sandbox Code Playgroud)

因为Code,当然,统一与本身.