Note carefully the following syntax restrictions, which serve to remove potential ambiguities associated with prefix operators.
P:-Q in parentheses
assert((P:-Q))
because the precedence of the infix operator ‘:-’, and hence of the
expression
P:-Q, is 1200. Enclosing the expression in parentheses reduces its
precedence to 0.
P->Q in parentheses
[(P->Q)]
because the precedence of the infix operator ‘->’, and hence of the
expression
P->Q, is 1050. Enclosing the expression in parentheses reduces its
precedence to 0.
point (X,Y,Z)
is invalid syntax.
:-(p;q),r.
(where ‘:-’ is the prefix operator) is invalid syntax. The system would try to interpret it as the structure:
,
/ \
:- r
|
;
/ \
p q
That is, it would take ‘:-’ to be a functor of arity 1. However, since the arguments of a functor are required to be expressions of precedence less than 1000, this interpretation would fail as soon as the ‘;’ (precedence 1100) were encountered.
In contrast, the term:
:- (p;q),r.
is valid syntax and represents the following structure:
:-
|
,
/ \
; r
/ \
p q