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 . 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
is usually
pictured as a tree in which every node contains the name
of the functor
of the term and has exactly
children each one of which is the root of the
tree of terms
.
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
can be pictured as a tree in which every node
contains the tree representation of the name
of the functor of the term
and has exactly
children each one of which is the root of the tree of
terms
.
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.