我正一头扎进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来添加更多的事实,但是它实际上并没有改变测试文件中的任何东西。
有什么想法吗?
发布于 2010-03-12 08:48:59
清单谓词的行为因Prolog解释器而异。XSB documentation解释哪些代码将包含在listing/0的输出中:
请注意,列表/0不会列出任何已编译的谓词,除非它们具有动态属性(请参见谓词属性/2)。谓词在显式声明为dynamic时获取动态属性,或者在数据库中断言该谓词的某些子句时自动获取该属性。
使用一个非常简单的test.P文件,其中包含以下内容:
test(a,b).这里使用XSB中的file /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的行为方式与Learn 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.https://stackoverflow.com/questions/2425556
复制相似问题