We provide some syntax extensions in the spirit of SWI-Prolog 7 [10]. To allow a richer syntax we additionally allow closed lists, singleton sets and unit atoms as operators, thus providing additional parameters when forming a term. The resulting special syntax provides convenience for array subscripts, tagged structures and zero arguments.

operator --> atom

| "[" arguments "]"

| "{" term(1200) "}"

| "(" ")"

| "|" | "," | ".".

A postfix list X_{0} [X_{1}, .., X_{n}]
expression is parsed as an array index term sys_index(X_{0},
X_{1}, .., X_{n}) when the operator sys_index is
defined as postfix. The postfix empty set X_{0} {} and
singleton set X_{0} {X_{1}} expressions are parsed
as dictionary terms sys_struct(X_{0}) respectively
sys_struct(X_{0}, X_{1}) when the operator
sys_struct is defined as postfix.

A[I, J] % is an array index term

point{x:1, y:2} % is an dictionary term

dist() % is a zero argument term

A further special syntax allows zero argument terms. For this purpose, the compound syntax has been extended to accept an empty argument list. Further, the expression syntax has as well be accepted to accept a unit atom. An empty argument list is not mapped to a zero argument compound but to a unit atom postfix expression.

When writing out a term canonically operator definitions are ignored an expressions are written as compound. During non-canonical write, expressions are written back as expressions. Fur-ther parenthesis are put where the mix of operator level demands it. Finally, escaped operators are put in parenthesis when necessary.