foo(bar) prolog(a, X) hilog(X) 123(john, 500) X(kostis, sofia) X(Y, Z, Y(W)) f(a, (b(c))(d)) map(double)([], []) h(map(P)(A, B))(C)
Like a functor in Prolog, a functor in HiLog can be characterized by its name and its arity which is the number of arguments this functor is applied to. For example, the compound term whose principal functor is 'map(P)' of arity 2, and which has arguments L1, and L2, is written as:
map(P)(L1, L2)
As in Prolog, when we need to refer explicitly to a functor we will normally denote it by the form Name/Arity. Thus, in the previous example, the functor 'map(P)' of arity 2 is denoted by:
map(P)/2Note that a functor of arity 0 is represented as an atom.
In Prolog, a compound term of the form p(t1, t2,..., tk) is usually pictured as a tree in which every node contains the name p of the functor of the term and has exactly k children each one of which is the root of the tree of terms t1, t2,..., tk.
For example, the compound term
s(np(kostis), vp(v(loves), np(sofia)))would be pictured as the following tree:
s / \ np vp | / \ | v np | | | kostis loves sofia |
The principal functor of this term is s/2. Its two arguments are also compound terms. In illustration, the principal functor of the second argument is vp/2.
Likewise, any external representation of a HiLog compound term t(t1, t2,..., tk) can be pictured as a tree in which every node contains the tree representation of the name t of the functor of the term and has exactly k children each one of which is the root of the tree of terms t1, t2,..., tk.
Sometimes it is convenient to write certain functors as operators. Binary functors (that is, functors that are applied to two arguments) may be declared as infix operators, and unary functors (that is, functors that are applied to one argument) may be declared as either prefix or postfix operators. Thus, it is possible to write the following:
X+Y (P;Q) X<Y +X P;More about operators in HiLog can be found in section 4.3.