2010-03-11 81 views
1

我正在潛入prolog的世界,但是我似乎碰到了淺水!簡單的問題 - XSB Prolog

我期待在數據庫操作在序言至於本教程:Learn Prolog Now!

它指出,我可以通過輸入listing

所以,我想它看到我的數據庫,它應該基本上輸出一切我.P文件(事實,規則),但是這是我所得到的,這裏是我的命令序列:

? consult('D:\Prolog\testfile.P'). 
[testfile.P loaded] 

? listing. 

library_directory(C:blahblahpathtoXSB) 
library_directory(C:blahblahXSBpath) 
{this is listed around 5 times)} 

不應該在該命令顯示的是在testfile.P,根據教程? 也請參考testfile.P我應該能夠使用assert添加更多的事實,但它實際上並沒有改變testfile.P ..中的任何內容?

任何想法

回答

2

列表謂詞的行爲因Prolog解釋器而異。該XSB documentation解釋什麼代碼將被納入上市/ 0輸出:

注意,清單/ 0沒有列出任何 編譯謂詞,除非他們有 動態特性(見謂詞 屬性/ 2)。謂詞在聲明 聲明爲動態時獲取 動態屬性,或者在 數據庫中聲明 謂詞的某些子句時自動獲取該動態屬性 。

含這是一個非常簡單的test.P文件:

test(a,b). 

這裏使用與諮詢文件,並斷言的規則都在上市XSB/0。它只輸出動態斷言規則,文件沒有內容:

| ?- consult('test.P'). 
[test loaded] 

yes 
| ?- listing. 
library_directory(/home/jeffd/xsb/XSB/packages). 
library_directory(/home/jeffd/xsb/XSB/site/lib). 
library_directory(/home/jeffd/xsb/XSB/site/config/i686-pc-linux-gnu/lib). 
library_directory(/home/jeffd/xsb/XSB/config/i686-pc-linux-gnu/lib). 
library_directory(/home/jeffd/.xsb/config/i686-pc-linux-gnu). 

yes 
| ?- assert(testing(c,d)). 

yes 
| ?- listing. 
testing(c,d). 

library_directory(/home/jeffd/xsb/XSB/packages). 
library_directory(/home/jeffd/xsb/XSB/site/lib). 
library_directory(/home/jeffd/xsb/XSB/site/config/i686-pc-linux-gnu/lib). 
library_directory(/home/jeffd/xsb/XSB/config/i686-pc-linux-gnu/lib). 
library_directory(/home/jeffd/.xsb/config/i686-pc-linux-gnu). 

SWI-Prolog行爲方式學習序言現在,描述和輸出這兩個文件的內容,並動態添加規則:

?- consult('test.P'). 
% test.P compiled 0.00 sec, 1,192 bytes 
true. 

?- assert(testing(c,d)). 
true. 

?- listing. 

test(a, b). 

% Foreign: rl_read_history/1 

:- dynamic testing/2. 

testing(c, d). 

% Foreign: rl_write_history/1 

% Foreign: rl_add_history/1 

% Foreign: rl_read_init_file/1 
true. 
+0

是隻是使我的謂詞動態化的問題,謝謝 – KP65 2010-03-12 19:23:51