2012-02-29 4 views
0

プロローグの初心者はこちら。Prologのナレッジベースからユニークな結果を返すにはどうすればよいですか?

のは、私は食べ物が含まれているプロローグ知識ベースを持っており、それは例えば、価格だとしましょう:

food(banana,99). 

など

私がある場合はtrueを返します述語を書くしようとしています同じ価格を持つ知識ベース内の2つ以上のアイテム。私は(それが同じを見つけることだという問題が何であるかを理解して価格Xとデータベースで唯一つの項目がある場合

multiple(X) :- food(_ ,X), food(_ ,X). 

はtrueを返します:私は遭遇しています問題は、クエリは、私が書いたということです項目を2回返してtrueを返します)、私は2つ以上のクエリを書く方法を理解していませんユニーク食品からの項目。

次のように私は、「ユニークな」ルールを書いてみました:

multiple(X) :- food(Y,X), food(Z,X), unique(Y,Z). 
unique(Y,Z) :- Y /= Z 

しかし、それは動作するようには思えません。

ありがとうございました。

答えて

6

"等しくない"と書かれているのは\=であり、標準のPrologでは/=ではありません。あなたのソリューションは正常に動作するはずです:

?- [user]. 
|: food(milk, 10). 
|: food(banana, 99). 
|: food(strawberry, 40). 
|: food(bread, 40). 
|: % user://2 compiled 0.00 sec, 664 bytes 
true. 

?- food(X, Price), food(Y, Price), X \= Y. 
X = strawberry, 
Price = 40, 
Y = bread ; 
X = bread, 
Price = 40, 
Y = strawberry ; 
false. 

重複を返す可能性がある点を除き、それらを取り除くために、使用しています

food(X, Price), food(Y, Price), X @< Y. 

ようなクエリを使用する用語-注文第1項があることを確認する@<を(彼らは同じではありません意味している)は、第2の「より少ないです」。

+0

ああ、それはそのような小さなものだったことを知っていたはずです。私はそれが今働くと思う、ありがとう。 – dmallory42

関連する問題