在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
与自身是统一的