2013-06-30 3 views
1

У меня есть база данных информации о продукте в магазине, которая выглядит так: product(Barcode, ProductName, Category, Refrigerated, VendorName).Получение ложных данных вместо true в ProLog

Я пытаюсь написать (очень) базовую операцию, чтобы проверить, имеют ли два продукта один и тот же штрих-код.

Мой код:

Но при его проверке я получил:

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

Так что я пытался сказать ему, чтобы вернуть true всегда, делая это заявление без требований:

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

Но у меня все еще есть false. Любые идеи, почему это происходит?

ответ

6

Это потому, что code1 & code2 являются atoms, и так как вы не передаете в атомах code1 & code2, он не соответствует и возвращает false. Вы хотите variables (которые начинаются с заглавной буквы или подчеркивания) вместо:

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

Это может быть упрощена просто:

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

в Code, конечно, унифицированный с самим собой.

+1

Спасибо, работает как шарм! –