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 SWI-Prolog.
Install this library:
swipl -g 'pack_install(prolog_library_collection)' -t halt
Once installed, modules from this library are loaded as follows:
:- [library(atom_ext)].
archive_ext
This module extends the standard library archive
:
mtree
, which is
a plain text format that is almost never used yet leads to many
false positives in practice.assoc_ext
This module extends the standard library assoc
:
option
.with(value,key)
pairs.atom_ext
This module provides additional support for working with atoms:
call_ext
meta-predicates
closure
code_ext
This module extends support for working with character-denoting numeric codes:
put_codes(+Codes:list(code))
put_codes(+Out:stream, +Codes:list(code))
conf_ext
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.
counter
csv_ext
Streamed processing of CSV files.
date_time
dcg
Definite Clause Grammars
In directory `/dcg` you will find a collection of Definite Clause Grammar (DCG) modules.
dcg/dcg_abnf
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:
'#'(?N:nonneg, :Dcg_0)//
Specific repetition is a special case of [[variable repetition]],
because #(N, Dcg_0)
is the same as 'm*n'(N, N, Dcg_0)
.
##### Kleene
Kleene star is a metasyntactic construct which states that zero or more occurrences of Dcg_0 must be processed:
*(?N:nonneg, :Dcg_0)//
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:
+(?N:nonneg, :Dcg_0)//
Kleene sum is a special case of [[variable repetition]], because +(N,
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:
?(:Dcg_0)//
Optional sequence is a special case of [[variable repetition]],
because ?(Dcg_0)
is the same as 'm*n'(0, 1, Dcg_0)
.
DCG | Meaning | Name |
---|---|---|
`#(?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:
Type | Definition |
---|---|
media | A compound term of the form media(Super:atom/Sub:atom,Parameters:list(opt)) |
opt | A unary compound term whose predicate letter is an option name and whose argument is a corresponding option value. |
dcg/dcg_ext
debug_ext
default
dict
Dictionaries.
dlist
Difference lists.
file_ext
Handling files and directories.
graph/gml
graph/graph_ext
graph/jgf
hash_ext
http/http_client2
http/http_generic
http/http_pagination
http/http_resource
http/http_server
json_ext
This module provides extended JSON support on top of the standard
library http/json
:
json_load(+File:atom, -Structure:dict) is det.
json_save(+File:atom, +Structure:dict) is det.
list_ext
math_ext
media_type
nlp/nlp_lang
os_ext
Running external processes, streaming to/from external processes.
pagination
pair_ext
pp
pure
sort_ext
stream_ext
Support for recoding, unpacking, sorting, and hasing streams.
string_ext
task
term_ext
thread_ext
uri_ext
Constructing/decomposing URIs.
xml_ext
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.
xsd
Support for XML Schema 1.1 Part 2: Datatypes.