假设当前正在运行的文件foobar.pl
目录包含以下最小知识库:
foo(bar).
foo(baz).
frobozz.
如果我启动swi-prolog
(通过在命令中运行swipl
),并立即运行
?- [foobar].
% foobar compiled 0.00 sec, 4 clauses
true.
?- listing.
... foobar
的内容在> 100行无关输出的海洋中丢失。
如何将listing
的输出限制为foobar
?
或者,如何将其限制为我明确consult
编辑的知识库的内容?
我确实查看了listing/1
和listing/0
的{{3}},但我找不到任何有用的信息:
清单/ 1 列出Pred指定的谓词。 Pred可以是谓词名称(atom),它列出具有此名称的所有谓词,而不管它们的arity。它也可以是谓词指示符(/或//),可能与模块合格。例如:? - listing(lists:member / 2)..
通过使用子句/ 2枚举谓词的子句并使用portray_clause / 1打印每个子句来生成列表。这意味着生成变量名称(A,B,...),布局由portray_clause / 1中的规则定义。
清单/ 0 使用listing / 1列出来自调用模块的所有谓词。例如,? - 列表。列出默认用户模块中的子句和? - 列表:列表。列出模块列表中的子句。
当然,我确实尝试了以下无用的想法:
?- foobar:listing.
true.
答案 0 :(得分:3)
foobar.pl
应该成为(例如)
:- module(foobar, [foo/1]).
foo(bar).
foo(baz).
frobozz.
答案 1 :(得分:2)
您可以轻松地将普通Prolog文件的内容加载到模块中。例如:
?- fb:consult(foobar).
true
然后致电:
?- fb:listing.
foo(bar).
foo(baz).
frobozz.
true.
或仅列出特定谓词:
?- fb:listing(foo/1).
foo(bar).
foo(baz).
true.