私はIvan Bratkoの本で勉強しています:「人工知能のプログラミング」を大学の試験で使用し、SWI Prologを使用しています.assert述語とretract述語に関するこの本の例について疑問があります.
いくつかの事実を動的として宣言する次のコードを単純に提示します。
:-dynamic fast(ann).
:-dynamic slow(tom).
:-dynamic slow(pat).
次に、Prolog シェルでassertルールを使用して、新しいルールをデータベースに定義します。
[debug] 59 ?- assert((faster(X,Y) :- fast(X), slow(Y))).
true.
わかりました。新しいルールがデータベースに追加されたようです。
今、私はこのクエリを実行しようとしましたが、失敗しました:
[debug] 64 ?- faster(X,Y).
false.
本には、出力は次のようになるはずだと書かれています。
A = ann
B = tom
誰が速くて誰が遅いかを指定し、後でそれをアサートするより速いルールを追加したと言う前のプログラムを参照したので、それは良くて合理的に聞こえます...
なぜ機能しないのですか?Prolog の実装 (SWI-Prolog) に依存するのでしょうか。