如何在 SWI-Prolog 中列出模块内的子句?
How to list the clauses inside a module in SWI-Prolog?
SWI-Prolog 有例如 library(dcgbasics) for use with DCGs.
虽然使用 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.
使用其中之一:
?- dcg_basics:listing.
或者:
?- listing(dcg_basics:_).
use_module/1-2
的第一个参数是文件说明,而不是模块名称。但是列出模块内容需要实际的模块名称,它可能与模块文件 basename 不同(就像这里的情况一样)。但是如何从文件规范中找到模块名称呢?在 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.
SWI-Prolog 有例如 library(dcgbasics) for use with DCGs.
虽然使用 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.
使用其中之一:
?- dcg_basics:listing.
或者:
?- listing(dcg_basics:_).
use_module/1-2
的第一个参数是文件说明,而不是模块名称。但是列出模块内容需要实际的模块名称,它可能与模块文件 basename 不同(就像这里的情况一样)。但是如何从文件规范中找到模块名称呢?在 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.