I am currently trying to understand some Prolog code for a game, but I somehow can’t find any documentation about a specific predicate or rule that the programmer used, called ‘line’.
He uses it in the argument list of other predicates, but neither is it customly defined by him nor can I find it in any documentation or anywhere else on the internet. I can’t even call it seperately in my Prolog interpreter, even though it works perfectly in his code.
Can anyone tell me, what this predicate means or does?
solve([line(_, Line, Constr)|Rest]) :-
line(_, Line, Constr) part)
This isn’t a predicate, this is a data structure, in Prolog terminology, a compound term. Check out this glossary: https://www.swi-prolog.org/pldoc/man?section=glossary.
You probably have a list of lines, and each line is represented as a triple of values. Based on what you show it is a bit difficult to guess what exactly it contains. The
_ in the first argument is the way the programmer says "I don’t care about this value".
A compound term is the only non-atomic data structure in Prolog. A list for example is a nested compound term like
.(a, .(b, .(c, ))) but the language has built-in functionality to let you write this as
[a, b, c].
You can think of compound terms, with their names and arity, as the typed objects of Prolog (but please don’t push this analogy too far).