This code is specific to SWI-Prolog, as that Prolog provides the traditional
"atom" and the non-traditional "string" as two distinct representations of
"sequences of characters".
We introduce the following additional vocabulary:
- A stringy term is a term that is either an atom or a string.
In SWI-Prolog, the string is a distinct representation of a sequence
of characters, distinct from the atom and mean to be used in text
processing rather than as basis for identifiers.
- A chary term is a term that is either a char (an atom of length 1) or a
code (an integer and, more precisely in SWI-Prolog, a Unicode code point).
- A charylist is less precise: it is a proper list of either codes or chars.
It may or may not contain uninstantiated elements. An empty list is a
charylist but we cannot know whether it is supposed to be composed of
codes or chars. A list containing only uninstantiated variables is also
a charylist and again we don't know what it is supposed to contain, at
least not yet.
Homepage for this code
- 2021-01-19: Reviewed
- 2021-02-16: Reviewed for packs, updated to pldoc.
- 2021-02-17: Trashed all the old code for testing "stringyness" and wrote new one based on the "texty type tree"
- 2021-06-11: Back up on github
- stringy_morph(?StringyA, ?StringyB, ?TypeA, ?TypeB)
- Behaves leniently, i.e. preferably fails instead of throwing if bad
values are passed.
- stringy_morph(?StringyA, ?StringyB, ?TypeA, ?TypeB, @Tuned)
- Establish the "morph" relationship between StringyA (an atom or a string)
and StringyB (an atom or a string) whereby
- StringyA and StringyB hold the same character sequence, and
- the actual type of StringyA is given by TypeA, and
- the actual type of StringyB is given by TypeB
Actual values of TypeA and TypeB are one of
Generate multiple solutions as possible.
Tuned is input only. If it is bound to
argument combinations lead to exception. If is bound to
(actually, anything other than
unwanted argument combinations lead to failure.
- stringy_charylist_morph(Stringy, Charylist, StatedStringyType, StatedCharylistType)
- stringy_charylist_morph(Stringy, Charylist, WantStringy, WantCharylist)
- Map a stringy to a charylist.
The following predicates are exported, but not or incorrectly documented.
- stringy_charylist_morph(Arg1, Arg2, Arg3, Arg4, Arg5)