Hilog terms are an extension found in some Prolog evaluators (XSB among others) that gives a flavor of (pseudo) higher order very practical to build meta-predicates or closures.
The key idea is to consider that a sequence t
(t1,..,tN) (with a <SPC> between the terms) is
equivalent to apply(t,t1,...,tN).
   
The middle space can be removed when there is no ambiguity, for instance when t is an integer, a char, a variable, a compound term or a symbol declared as being hilog.
In case of ambiguity between an operator-based expression or an hilog
expression, the operator-based expression will be chosen. For instance,
- (a+b) represents the term -(a+b) and not
apply(-,a+b).
   
One can force the hilog interpretation of a symbol by using the
directive hilog/1.
   
The following program illustrate the use of hilog terms to build meta-predicates.
     closure(R)(X,Y) :- R(X,Y).
     closure(R)(X,Y) :- R(X,Z),closure(R)(Z,Y).
     
     :-hilog(r).
     r(a,b).
     r(b,c).