|Did you know ...||Search Documentation:|
|Pack prolog_library_collection -- README.md|
A collection of Prolog libraries that have proven useful in various projects. These libraries are intended to extend the functionality that is already available in the SWI-Prolog standard libraries.
Install this library:
swipl -g 'pack_install(prolog_library_collection)' -t halt
Once installed, modules from this library are loaded as follows:
This module extends the standard library
mtree, which is a plain text format that is almost never used yet leads to many false positives in practice.
This module extends the standard library
This module provides additional support for working with atoms:
This module extends support for working with character-denoting numeric codes:
This module introduces a generic way for dealing with external configuration files:
cli_arguments(-Args:list(opt)) is det.
conf_json(-Conf:dict) is det.
Streamed processing of CSV files.
Definite Clause Grammars
In directory `/dcg` you will find a collection of Definite Clause Grammar (DCG) modules.
Advanced Bauckus-Naur Form (ABNF)
While DCGs are nice, they can be a bit verbose for expressing common repetition patterns. To make DCGs that include repetitions less verbose, this module implements variable repetition as defined in [[https://tools.ietf.org/html/rfc5234][RFC 5234: Augmented BNF for Syntax Specifications: ABNF]].
Suppose we want to parse sentences, which are non-empty sequences of words:
sentence1([H|T]) --> word(H), sentece2(T). sentence2([H|T]) --> word(H), sentence2(T) sentence2() --> "".
When this module is loaded, the same can be written as follows:
sentence(L) --> +(word, L).
##### variable repetition
Variable repetition is a metasyntactic construct which states that at least M and at most N occurrences of `:Dcg_0` must be processed:
'm*n'(?M:nonneg, ?N:nonneg, :Dcg_0)//
##### specific repetition
Specific repetition is a metasyntactic construct which states that exactly N occurrences of Dcg_0 must be processed:
Specific repetition is a special case of [[variable repetition]],
#(N, Dcg_0) is the same as
'm*n'(N, N, Dcg_0).
Kleene star is a metasyntactic construct which states that zero or more occurrences of Dcg_0 must be processed:
Kleene star is a special case of [[variable repetition]], because
*(N, Dcg_0) is the same as
'm*n'(_, _, Dcg_0).
##### Kleene sum
Kleene sum is a metasyntactic construct which states that one or more occurrences of Dcg_0 must be processed:
Kleene sum is a special case of [[variable repetition]], because
Dcg_0) is the same as
'm*n'(1, _, Dcg_0).
##### optional sequence
Optional sequence is a metasyntactic construct which states that Dcg_0 should either be processed once or not at all:
Optional sequence is a special case of [[variable repetition]],
?(Dcg_0) is the same as
'm*n'(0, 1, Dcg_0).
|`#(?N, :Dcg_0)//`||Process Dcg_0 exactly N times.||specific repetition|
|`*(:Dcg_0)//`||Process Dcg_0 0 or more times.||Kleene star|
|`'*n'(?N, :Dcg_0)//`||Process Dcg_0 at most N times.|
|`+(:Dcg_0)//`||Process Dcg_0 1 or more times.||Kleene sum|
|`?(:Dcg_0)//`||Process Dcg_0 0 or 1 times.||optional sequence|
|`'m*'(?M, :Dcg_0)//`||Process Dcg_0 at least M times.|
|`'m*n'(?M, ?N, :Dcg_0)//`||Process Dcg_0 at least M and at most N times.||variable repetition|
It contains the following modules:
|A compound term of the form |
|A unary compound term whose predicate letter is an option name and whose argument is a corresponding option value.|
Handling files and directories.
This module provides extended JSON support on top of the standard
json_load(+File:atom, -Structure:dict) is det.
json_save(+File:atom, +Structure:dict) is det.
Running external processes, streaming to/from external processes.
Support for recoding, unpacking, sorting, and hasing streams.
This module allows Prolog goals to be called on a stream that encodes an XML DOM:
list(atom), :Goal_1) is det.`
The following predicates allow the encoding of an XML file or stream to be determined:
xml_encoding(+In:stream, -Encoding:atom) is semidet.
xml_file_encoding(+File:atom, -Encoding:atom) is semidet.
Support for XML Schema 1.1 Part 2: Datatypes.