Search code examples
prolog

What does the / slash mean in this Prolog Predicate


Would anyone be able to explain to me what the forward slash '/' means in the context of this Prolog predicate. I've tried Googling it, reviewing other questions but I can't find a definitive answer, or at least one that makes sense to me. I'm aware of what arity is but I'm not sure this is related.

move_astar([Square | Path] / G / _, [NextSquare, Square | Path] / SumG / NewH) :-
     square(Square, NextSquare, Distance),
     not(member(NextSquare, Path)),
     SumG is G + Distance,
     heuristic(NextSquare, NewH).

Solution

  • It has no implicit meaning, and it is not the same as arity. Prolog terms are name(Arg1, Arg2) and / can be a name. /(Arg1, Arg2).

    There is a syntax sugar which allows some names to be written inline, such as *(X,Y) as X * Y and /(X,Y) as X / Y which is useful so they look like arithmetic (but NB. this does not do arithmetic). Your code is using this syntax to keep three things together:

    ?- write_canonical([Square | Path] / G / _).
    
    /(/([_|_],_),_)
    

    That is, it has no more semantic meaning than xIIPANIKIIx(X,Y) would have, it's Ls/G/H kept together.