2011-01-17 15 views
3

私のデータベースは次のとおりです。Prologのプログラミング - シンプルな負のクエリ

eat(magi,limo). 
eat(nona,banana). 

どのように私は尋ねない:「誰がリムジンを食べませんの?」これは:

eat(X,not(limo)). 

動作しません。 :(

+1

あなたが合法的な答えを持っている、あなたは答えや人としてそれをマークしなければならない問題だった –

答えて

8

すべてlimoの第一は、シンボルであり、あなたはシンボルを否定することはできません。何がやりたいことはすなわちnot(eat(X, limo))、述語を否定である。

しかしこれはまだ結果としてあなたにnonaを与えるものではありません。何故ならば、eat(X, limo)が偽であるという無限の値Xが無限大です。あなたが望むものを知るために、 "Xはリムジンを食べていません"より多くの情報が必要です。代わりに、 "X eat" Xはリムジンを食べていません」というメッセージが表示されます。

eat(X,Y), not(eat(X, limo)). 

これはXの解としてnonaを与えます。

0

eat(X, Y), Y \= limo, writeln(X), false.

+5

将来的にあなたの質問に答える停止します「リムジンを食べていない誰が?」あなたの質問は「誰がリムジン以外のものを食べますか?」と答えています。私。もしmagiがリムジンとバナナを食べるなら、それはあなたの質問にあるXの解決策になるでしょうが、私はそれがOPが望んでいるとは思っていません。 – sepp2k

関連する問題