をアサートに失敗:私はのような何かをしようとするとSWI-Prologの - 次のように私はオペレータを定義
:- op(500, xfx, =>).
:
assert(a => b).
プロローグは(「static_procedureを変更するには、no許可を言わないエラーが発生します=>)/ 2 'である。
セキュリティとして
をアサートに失敗:私はのような何かをしようとするとSWI-Prologの - 次のように私はオペレータを定義
:- op(500, xfx, =>).
:
assert(a => b).
プロローグは(「static_procedureを変更するには、no許可を言わないエラーが発生します=>)/ 2 'である。
セキュリティとして
、あなたは、実行時に述語を変更しようとしているSWIを警告する必要があります。ファイルの先頭に置く
:- dynamic (=>)/2.
はそれを行う必要があります。
(=>)/2
の代わりに別の記号を使用しているに違いありません。おそらく(->)/2
は、改変することができない対照構築物である。
Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 6.1.3-116-gf1c7e06) ... ?- asserta((a -> b)). ERROR: asserta/1: No permission to modify static procedure `(->)/2' ERROR: Defined at /opt/gupu/pl-devel/lib/swipl-6.1.3/boot/init.pl:194 ?- op(500, xfx, =>). true. ?- asserta(a => b). true.
Nit:上記は無効な構文です(これを見るにはGNUを試してください)。 '(=>)/ 2'にする必要があります。 – false
@false:まあ、私はそれを確認するためのインタープリタはありませんでした。ありがとう、私は編集:) – m09
それは常にそうです:述語インジケータは、対応する演算子の定義があれば角かっこを持たなければなりません。だから '(;)/ 2'と'( '、')/ 2'です。これらの引用符は、演算子の宣言とは独立して必要とされる '' a b ''のようなトークンの区切りにのみ使われます。 – false