2012-04-23 7 views

答えて

6

、あなたは、実行時に述語を変更しようとしているSWIを警告する必要があります。ファイルの先頭に置く

:- dynamic (=>)/2. 

はそれを行う必要があります。

+1

Nit:上記は無効な構文です(これを見るにはGNUを試してください)。 '(=>)/ 2'にする必要があります。 – false

+0

@false:まあ、私はそれを確認するためのインタープリタはありませんでした。ありがとう、私は編集:) – m09

+1

それは常にそうです:述語インジケータは、対応する演算子の定義があれば角かっこを持たなければなりません。だから '(;)/ 2'と'( '、')/ 2'です。これらの引用符は、演算子の宣言とは独立して必要とされる '' a b ''のようなトークンの区切りにのみ使われます。 – false

5

(=>)/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. 
+0

右が、私はそれが動作すると思いますPrologを対話的に使用している場合のみ!ファイルをコンパイルするとうまくいかない! – saadtaame

+0

どのPrologシステムを参照していますか? SWI、YAP、B、GNUはすべて同じです。 – false

+0

これはタイトル(SWI-Prolog) – saadtaame

関連する問題