Prolog 如何获得特定知识库的列表?

Prolog 如何获得特定知识库的列表?,prolog,swi-prolog,Prolog,Swi Prolog,假设当前工作区中的文件foobar.pl 目录包含以下最小知识库: foo(bar). foo(baz). frobozz. 如果启动swi prolog(通过在命令处运行swipl),并立即运行 ?- [foobar]. % foobar compiled 0.00 sec, 4 clauses true. ?- listing. “foobar的内容丢失在一个由超过100行不相关输出组成的海洋中。” 如何将列表的输出限制为foobar 或者,我如何将其限制为我明确查阅的那些知识库的内

假设当前工作区中的文件
foobar.pl
目录包含以下最小知识库:

foo(bar).
foo(baz).
frobozz.
如果启动
swi prolog
(通过在命令处运行
swipl
),并立即运行

?- [foobar].
% foobar compiled 0.00 sec, 4 clauses
true.

?- listing.
foobar
的内容丢失在一个由超过100行不相关输出组成的海洋中。”


如何将
列表的输出限制为
foobar

或者,我如何将其限制为我明确查阅的那些知识库的内容


我确实查看了清单/1和清单/0的相关信息,但没有找到任何有用的信息:

列表/1 列出Pred指定的谓词。Pred可以是一个谓词名称(atom),它列出了所有使用此名称的谓词,而不管它们的算术性如何。它也可以是谓词指示符(/或//),可能由模块限定。例如:?-列表(列表:成员/2)

通过使用子句/2枚举谓词的子句,并使用Scripte_子句/1打印每个子句,可以生成一个列表。这意味着将生成变量名(A、B,…),布局由SHARATE_子句/1中的规则定义

列表/0 使用清单1列出调用模块中的所有谓词。例如,清单。列出默认用户模块中的子句和?-lists:listing。列出模块列表中的子句


当然,我尝试过以下无用的想法:

?- foobar:listing.
true.

在SWI Prolog中,可以使用module/2指令限制加载子句的范围。例如,您的文件
foobar.pl
应该变成(例如)


您可以轻松地将普通Prolog文件的内容加载到模块中。例如:

?- fb:consult(foobar).
true
然后打电话:

?- fb:listing.

foo(bar).
foo(baz).

frobozz.
true.
或者只列出一个特定的谓词:

?- fb:listing(foo/1).
foo(bar).
foo(baz).

true.

源文件/2
帮助。不过,使用模块是更好的出路。
?- fb:listing(foo/1).
foo(bar).
foo(baz).

true.