在ProLog中获取false而不是true

在ProLog中获取false而不是true,prolog,logic,Prolog,Logic,我在一家商店里有一个产品信息数据库,看起来像这样:产品(条形码、产品名称、类别、冷藏、供应商名称) 我试图写一个(非常)基本的操作来检查两个产品是否有相同的条形码 我的代码: sameCode(product(code1,_,_,_,_),product(code2,_,_,_,_)):- code1=code2. 但在检查时,我发现: 52 ?- sameCode(product(972000456745, matches, 05, false, fire_ltd),product(9720

我在一家商店里有一个产品信息数据库,看起来像这样:
产品(条形码、产品名称、类别、冷藏、供应商名称)

我试图写一个(非常)基本的操作来检查两个产品是否有相同的条形码

我的代码:

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
。知道为什么会这样吗

这是因为
code1
code2
是,并且由于您没有传入原子
code1
code2
,因此它不匹配并返回
false
。您希望(以大写字母或下划线开头)改为:

这可以简化为:

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

因为
code
当然是与自身相统一的。

这是因为
code1
code2
是,而且由于您没有传递原子
code1
code2
,所以它不匹配并返回
false
。您希望(以大写字母或下划线开头)改为:

这可以简化为:

sameCode(product(Code,_,_,_,_), product(Code,_,_,_,_)).
当然,
code
与自身是统一的