next up previous contents index
Next: Lists Up: Terms Previous: Variables   Contents   Index

Compound Terms

Like in Prolog, the structured data objects of HiLog are compound terms (or structures). The external representation of a HiLog compound term comprises a functor (called the principal functor or the name of the compound term) and a sequence of one or more terms called arguments. Unlike Prolog where the functor of a term must be an atom, in HiLog the functor of a compound term can be any valid HiLog term. This includes numbers, atoms, variables or even compound terms. Thus, since in HiLog a compound term is just a term followed by any finite number of arguments, all the following are valid external representations of HiLog compound terms:

          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)/2
Note that a functor of arity 0 is represented as an atom.

In Prolog, a compound term of the form $p(t_1, t_2, \ldots, t_k)$ 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 $t_1, t_2, \ldots, t_k$.

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(t_1, t_2, \ldots, t_k)$ 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 $t_1, t_2, \ldots, t_k$.

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.


next up previous contents index
Next: Lists Up: Terms Previous: Variables   Contents   Index
Baoqiu Cui
2000-04-23