4 ms·
I think the predicate you wanted to demonstrate is called append/3, which works on list (while concat applies to atoms). In Prolog, 'foo' constructs an atom, w
by sltkr 13y ago
I think the predicate you wanted to demonstrate is called append/3, which works on list (while concat applies to atoms).
In Prolog, 'foo' constructs an atom, which is equivalent to foo without any quotes (but the quotes are useful to construct atoms with spaces, with digits, starting with a capital letter, etc.)
However, if you want to manipulate atoms as text, you typically want to use strings instead, which are literally lists of character codes in Prolog, and can be entered as double quotes. For example, "ABC" = [65,66,67]. To convert between strings and atoms dynamically, use atom_chars/2.
For example:
?- append("Prolog is", " awesome", Z), atom_chars(A,Z).
Z = [80, 114, 111, 108, 111, 103, 32, 105, 115|...],
A = 'Prolog is awesome'.
?- append("Prolog is", Y, "Prolog is awesome"), atom_chars(A,Y).
Y = [32, 97, 119, 101, 115, 111, 109, 101],
A = ' awesome'.
?- append(X, "is awesome", "Prolog is awesome"), atom_chars(A,X).
X = [80, 114, 111, 108, 111, 103, 32],
A = 'Prolog '.
- dangoldin 13y agoThanks for the explanation. It's such a neat idea that inputs and outputs can be interchangeable. Opens up approaches that are very different than the standard ones. The append predicate is definitely a better example so thanks for sharing.