SWI-Prolog具有library module dcgbasics,可与DCG一起使用。
使用use_module/1可以轻松引用模块,例如
:- use_module(library(dcg/basics)).
尝试使用listing/1并不是那么容易。
?- listing(dcg:_).
true.
?- listing(dcgbasics:_).
true.
?- basics:listing.
true.
在library(dcg/basics)
中获得条款清单的正确方法是什么?
给出答案后跟进。
要列出特定子句,例如blanks//0
查询是
?- listing(dcg_basics:blanks).
blanks(A, B) :-
blank(A, C),
!,
D=C,
blanks(D, B).
blanks(A, A).
true.
答案 0 :(得分:3)
使用以下任一方法:
?- dcg_basics:listing.
或者:
?- listing(dcg_basics:_).
的第一个参数use_module/1-2
是一个文件规范,而不是一个模块名称。但是列出模块内容需要实际的模块名称,该名称可能与模块文件的基本名称不同(在这里是这种情况)。但是如何从文件规范中找到模块名称?在SWI-Prolog中的特定情况下:
?- absolute_file_name(library(dcg/basics), Path, [extensions([pl])]),
module_property(Module, file(Path)).
Path = '/Users/pmoura/lib/swipl/library/dcg/basics.pl',
Module = dcg_basics.