3

私は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) に依存するのでしょうか。

4

1 に答える 1