2013-04-29 47 views
0

當我做一個斷言,如:無權修改靜態過程

assert(-color(red)). 

它給我的錯誤:

ERROR: assert/1: No permission to modify static procedure `(-)/1' 

,所以我-color改爲動態:

dynamic -color/4. 

現在它給了我錯誤:

ERROR: dynamic/1: Type error: `atom' expected, found `-color' 

有什麼想法?

回答

3

首先,正如Prolog本身告訴你的,它正在閱讀-color(foo)作爲-(color(foo))。這就是爲什麼它抱怨(-)/1而不是-color。你不能用連字符開始原子。

其次,您需要asserta/1assertz/1,而不是assert/1

第三,當你聲明動態謂詞元數4,你應該元數的4使用它,而不是1元數。換句話說,你的動態要麼讀:- dynamic color/4和使用asserta(color(Red,Green,Blue,Alpha)),或者它應該閱讀:- dynamic color/1和使用asserta(color(red))/4/1的組合不是你的意思。