简单的问题 - XSB Prolog

时间:2010-03-11 14:12:13

标签: prolog

我正潜入prolog的世界,但我似乎遇到了浅水!

我正在研究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中的任何内容。

任何想法

1 个答案:

答案 0 :(得分:2)

列表谓词的行为因Prolog解释器而异。 XSB documentation解释了列表/ 0的输出中包含的代码:

  

请注意,列表/ 0不会列出任何内容   编译谓词,除非他们有   动态属性(见谓词   属性/ 2)。一个谓词得到了   显式时的动态属性   声明为动态或自动   在某些条款中获得它   谓词在断言中断言   数据库中。

使用一个非常简单的test.P文件包含:

test(a,b).

这里使用XSB中的listing / 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的行为方式现在学习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.