OK, I just got it XD I had too many parentheses in the query.
The correct form is: (? (vertical line (point 1 2) (point 1 3))) But that leaves me with the question, Why is the syntax "(vertical line (..." instead of "(vertical (line ..." ? My best guess is that, internally, the symbol 'vertical gets consed into the rest of the predicate, as defined in its property list. that is, when you run: : (show 'vertical) vertical NIL T (((line (point @X @Y) (point @X @Z)))) -> vertical the name of the sym (vertical) gets consed into the (line (point @X @Y) (point @X @Z)) part, and since that's what is used to unify the query, the query must have that same "(vertical line ..." structure. But that's just a guess. If there is some deeper meaning I would be happy to know :D On Mon, Jul 2, 2018 at 11:23 PM Bruno Franco <brunofrancosala...@gmail.com> wrote: > The prolog saga continues! > This time, I'm having trouble with unification. > > I have this predicate: > vertical(line(point(X, Y), point(X, Z))). > > That gets unified with this query: > vertical(line(point(1, 2), point(1, 3))). > > In prolog, this returns true. > > But when I run what I (think) is the equivalent pilog code: > > (be vertical (line (point @X @Y) (point @X @Z))) > (? (vertical (line (point 1 2) (point 1 3)))) > > The query returns NIL > > Is my syntax wrong? Or should I have specified some other intermediate > predicate? > > Thank you >