私のデータベースは次のとおりです。Prologのプログラミング - シンプルな負のクエリ
eat(magi,limo).
eat(nona,banana).
どのように私は尋ねない:「誰がリムジンを食べませんの?」これは:
eat(X,not(limo)).
動作しません。 :(
私のデータベースは次のとおりです。Prologのプログラミング - シンプルな負のクエリ
eat(magi,limo).
eat(nona,banana).
どのように私は尋ねない:「誰がリムジンを食べませんの?」これは:
eat(X,not(limo)).
動作しません。 :(
すべてlimo
の第一は、シンボルであり、あなたはシンボルを否定することはできません。何がやりたいことはすなわちnot(eat(X, limo))
、述語を否定である。
しかしこれはまだ結果としてあなたにnona
を与えるものではありません。何故ならば、eat(X, limo)
が偽であるという無限の値Xが無限大です。あなたが望むものを知るために、 "Xはリムジンを食べていません"より多くの情報が必要です。代わりに、 "X eat" Xはリムジンを食べていません」というメッセージが表示されます。
eat(X,Y), not(eat(X, limo)).
これはX
の解としてnona
を与えます。
eat(X, Y), Y \= limo, writeln(X), false.
将来的にあなたの質問に答える停止します「リムジンを食べていない誰が?」あなたの質問は「誰がリムジン以外のものを食べますか?」と答えています。私。もしmagiがリムジンとバナナを食べるなら、それはあなたの質問にあるXの解決策になるでしょうが、私はそれがOPが望んでいるとは思っていません。 – sepp2k
あなたが合法的な答えを持っている、あなたは答えや人としてそれをマークしなければならない問題だった –