1

私はショップに次のような製品情報のデータベースを持っていますproduct(Barcode, ProductName, Category, Refrigerated, VendorName)

2 つの製品に同じバーコードがあるかどうかを確認する (非常に) 基本的な操作を記述しようとしています。

私のコード:

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ました。なぜそれが起こっているのですか?

4

1 に答える 1

6

これは、code1&code2アトムcode1であり、アトム&を渡してcode2いないため、一致せずに返されるためfalseです。代わりに、変数(大文字またはアンダースコアで始まる)が必要です。

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

これは次のように単純化できます。

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

Codeもちろん、それ自体で統一されています。

于 2013-06-30T15:22:51.837 に答える