2010-03-11 66 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