SWI-Prolog 有例如 library(dcgbasics)用于 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.
关于reflection - 如何在 SWI-Prolog 中列出模块内的子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54402993/