8

私はPrologにこのコードを持っています:

dynamic(player_at/1).
player_at(house).
goto(X) :- retract(player_at(house)), assert(player_at(X)).

しかし、私はまだこのエラーが発生します:

uncaught exception: error(permission_error(modify,static_procedure,player_at/1),retract/1)

goto(foo) を実行すると。

動的ドキュメントを読みましたが、少なくとも gprolog では、その使用方法がわかりません。何か不足していますか?

4

1 に答える 1

14

先頭に を追加して最初の行を修正し:-ます。

:- dynamic(player_at/1).

:-この行がないdynamic/1と、既存の述語を実行する代わりに、述語を定義しdynamicます。

他のプロローグ実装 (gprolog ではない) もこれをサポートしています。

:- dynamic player_at/1.
于 2009-05-09T21:00:12.097 に答える