如何使用清单1列出模块库的子句(dcg / basics)

时间:2019-01-28 13:24:20

标签: module prolog swi-prolog dcg

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.

1 个答案:

答案 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.