2010-03-11 81 views
4

如果我想使規則動態,所以我可以在數據庫文件加載後使用斷言,我該怎麼做?我使用XSB Prolog的此刻,該文件是這樣的:序言中的「動態」謂詞

:- dynamic likes/2 

likes(mary,tom) 

當我嘗試協商,XSB文件我得到一個錯誤:

​​

任何想法?

回答

7

動態謂詞按照您的預期工作,所以如果它不適合您,它還有其他錯誤。

如果test.P看起來是這樣的:

:- dynamic likes/2. 

likes(mary,tom). 

可以諮詢,然後更喜歡/ 2的事實可以斷言:

XSB Version 3.2 (Kopi Lewak) of March 15, 2009 
[i686-pc-linux-gnu; mode: optimal; engine: slg-wam; scheduling: local; word size: 32] 

| ?- consult('test.P'). 
[Compiling ./test] 
[test compiled, cpu time used: 0.0440 seconds] 
[test loaded] 

yes 
| ?- assert(likes(mary, bob)). 

yes 
| ?- likes(X,Y). 

X = mary 
Y = tom; 

X = mary 
Y = bob; 
+0

這就是真的相當奇怪 - 我也一樣東西,它會拋出這種奇怪的錯誤!我試圖理解,「不允許等等等等......」意思是! – KP65 2010-03-12 12:45:21

+0

我剛剛用XSB 3.2版測試了相同的文件,它似乎工作正常,但我必須使用2.7.1作爲其他即時通訊使用似乎需要它(interprolog)..你可以嘗試在2.7.1和讓我知道你看到了什麼? 謝謝 – KP65 2010-03-12 13:06:58

+0

我試過使用XSB 2.7,並且也得到了錯誤,所以自該版本以來行爲發生了變化。但是,我能夠用load_dyn('test.P')加載文件,它將整個文件加載爲動態而不是編譯它。 (從文件中刪除: - 動態行。)除了test.P.之外,還可以聲明更多的喜歡/ 2規則。有關加載動態代碼的文檔,請參閱此處:http://www.cs.sunysb.edu/~sbprolog/manual2/node5.html – 2010-03-12 19:10:46