次のプログラムがあるとします。
a(tom).
v(pat).
およびクエリ (false を返す):
\+ a(X), v(X).
X
トレースすると、が にインスタンス化されtom
、述語a(tom)
が成功し、したがって\+ a(tom)
失敗することがわかります。
私はいくつかのチュートリアルで、\+
Prolog の not ( ) は単なるテストであり、インスタンス化を引き起こさないことを読みました。
誰かが私のために上記の点を明確にしてもらえますか? インスタンス化を見ることができるように。
not (失敗としての否定) と論理否定には違いがあることを理解しています。どのような場合に同じように動作し、いつ異なる動作をするかを説明している良い記事を参照できますか?