5

次のように演算子を定義します。

:- op(500, xfx, =>).

次のようなものを試すと:

assert(a => b).

Prolog で、「static_procedure (=>)/2 を変更する権限がありません」というエラーが発生します。

解決策はありますか?

4

2 に答える 2

5

セキュリティとして、実行時に述語を変更しようとしていることを SWI に警告する必要があります。

:- dynamic (=>)/2.

ファイルの先頭に配置してください。

于 2012-04-23T14:15:32.207 に答える
4

の代わりに別の記号を意味していたに違いありません(=>)/2。おそらく(->)/2、これは変更できない制御構造です。

SWI-Prolog へようこそ (マルチスレッド、32 ビット、バージョン 6.1.3-116-gf1c7e06)
...
?- asserta((a -> b))。
エラー: asserta/1: 静的プロシージャ `(->)/2' を変更する権限がありません
エラー: /opt/gupu/pl-devel/lib/swipl-6.1.3/boot/init.pl:194 で定義されています
?- op(500, xfx, =>).
真実。

?- asserta(a => b)。
真実。
于 2012-04-23T14:55:11.890 に答える