Как составить список предложений библиотеки модулей (dcg / basics), используя перечисление / 1 - PullRequest
0 голосов
/ 28 января 2019

SWI-Prolog имеет библиотеку 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 голосов
/ 28 января 2019

Используйте либо:

?- dcg_basics:listing.

Или:

?- listing(dcg_basics:_).

Первый аргумент use_module/1-2 - это спецификация файла, а не имя модуля.Но перечисление содержимого модуля требует фактического имени модуля, которое может отличаться (как это имеет место здесь) от базового имени файла модуля.Но как найти имя модуля из спецификации файла?В частном случае SWI-Пролог:

?- 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.
...