4.1.5.3 Syntax Restrictions

Note carefully the following syntax restrictions, which serve to remove potential ambiguities associated with prefix operators.

  1. The arguments of a compound term written in standard syntax must be expressions of precedence less than 1000. Thus it is necessary to write the expression 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.

  2. Similarly, the elements of a list written in standard syntax must be expressions of precedence less than 1000. Thus it is necessary to write the expression 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.

  3. In a term written in standard syntax, the principal functor and its following ‘(’ must not be separated by any intervening spaces, newlines, or other characters. Thus
              point (X,Y,Z)
    

    is invalid syntax.

  4. If the argument of a prefix operator starts with a ‘(’, this ‘(’ must be separated from the operator by at least one space or other layout character. Thus
              :-(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
    

Send feedback on this subject.