Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wouterbeek/prolog_library_collection
A collection of Prolog libraries.
https://github.com/wouterbeek/prolog_library_collection
prolog swi-prolog
Last synced: 3 months ago
JSON representation
A collection of Prolog libraries.
- Host: GitHub
- URL: https://github.com/wouterbeek/prolog_library_collection
- Owner: wouterbeek
- License: mit
- Created: 2013-04-16T18:34:42.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2021-05-03T06:24:02.000Z (over 3 years ago)
- Last Synced: 2024-05-23T04:34:07.341Z (6 months ago)
- Topics: prolog, swi-prolog
- Language: Prolog
- Homepage:
- Size: 8.24 MB
- Stars: 83
- Watchers: 11
- Forks: 13
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Prolog-Library-Collection
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](https://www.swi-prolog.org) standard libraries.## Dependencies
Install [SWI-Prolog](https://www.swi-prolog.org).
## Installation
Install this library:
```sh
swipl -g 'pack_install(prolog_library_collection)' -t halt
```## Use
Once installed, modules from this library are loaded as follows:
```pl
:- [library(atom_ext)].
```## Module overview
### Module `archive_ext`
This module extends the standard library `archive`:
- `archive_extension(?Extension:atom)`
Succeeds if `Extension` is a default file name extension for an
archive filter or format, as declared in library [[media_type]].- `archive_media_type(?MediaType:media)`
Succeeds if `MediaType` is the Media Type of an archive filter or
format.- `archive_open(+In:stream, -Archive:blob)`
Opens an archive over all supported and sensible archive filters
and formats. This specifically excludes format `mtree`, which is
a plain text format that is almost never used yet leads to many
false positives in practice.### Module `assoc_ext`
This module extends the standard library `assoc`:
- `merge_assoc(+New:assoc, +Old:assoc, -Merge:assoc)`
Merges two assocs into a new one. If the same key exists in `New`
and `Old`, the format replaces the latter in `Merge`. These
semantics are inspired by those of the standard library predicate
`merge_options/3` in library `option`.- `transpose_assoc(+Assoc:assoc, -Transposed:assoc)`
Turns an assoc of (key,value) pairs into one with(value,key)
pairs.### Module `atom_ext`
This module provides additional support for working with atoms:
- `atom_capitalize(+Original:atom, ?Capitalized:atom)`
Succeeds if `Capitalized` is a copt of `Orginal` where the first
character is in upper case (if applicable).- `atom_ellipsis(+Original:atom, ?MaxLength:between(2,inf), ?Ellipsed:atom)`
Succeeds if `Ellipsed` is like `Original`, but has ellipsis
applied in order to have `MaxLength`.- `atom_postfix(+Original:atom, ?PostFix:atom)`
- `atom_postfix(+Original:atom, ?Length:nonneg, ?PostFix:atom)`Succeeds if `Postfix` is a postfix of `Original` consisting of
`Length` characters.- `atom_prefix(+Original:atom, ?PostFix:atom)`
- `atom_prefix(+Original:atom, ?Length:nonneg, ?PostFix:atom)`Succeeds if `Prefix` is a prefix of `Original` consisting of
`Length` characters.- `atom_strip(+Original:atom, ?Stripped:atom)`
- `atom_strip(+Original:atom, +Strip:list(char), ?Stripped:atom)`Succeeds if `Stripped` is a copy of `Original` where leading and
trailing characters in `Strip` have been removed.- `atom_terminator(+Original:atom, +Terminator:atom, ?Terminated:atom)`
Succeeds if `Terminated` is a copy of `Original` which is ensured
to end with the `Terminator` character.- `atom_truncate(+Original:atom, +MaxLenhgt:noneng, ?Truncated:atom)`
Like `atom_prefix/3`, but the `Truncated` atom is the `Original`
atom in case `MaxLength` exceeds the `Original` atom length.### `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]].#### A simple example
Suppose we want to parse sentences, which are non-empty sequences of
words:```pl
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:
```pl
sentence(L) -->
+(word, L).
```#### definition
##### 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:```pl
'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:```pl
'#'(?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:```pl
*(?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:```pl
+(?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:```pl
?(: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:- `call_on_xml(+In:stream, +Names: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.
- `xsd_date_time/3` for translating between XSD date/time
representations and date/time representations as supported by
[[https://github.com/wouterbeek/Prolog-Library-Collection][Prolog-Library-Collection]].- `xsd_date_time_type/1` for checking/enumerating the XSD date/time
datatype IRIs.- `xsd_encode_string//0` a DCG rule for encoding strings of
characters according to the restrictions of the XSD string
datatype.- `xsd_numeric_type/1` enumerates XSD numeric datatype IRIs.
- `xsd_strict_subtype/2` and `xsd:subtype/2` allow the hierarchy of
XSD datatype IRIs to be queried.