A function call is a either simple compound term where the functor is the name of a primitive or program defined function, or it is a non-simple compound term where the compound term that denotes the functor is a function call that returns a function value.
For certain binary primitive functions the functor name may be used as an infix operator and placed between the two arguments. This holds for the usual binary arithmetic
* etc. for which function applications are written as expressions such as
The special zero argument functions
pi_, invoked as in expressions
to the numbers ’e’ and ’pi’. More details are given in Arithmetic.
In the QuLog interpreter a function call, indeed any expression, can be given as an entry to be evaluated.
| ?? 67.7/2.3. 29.4348 : num | ?? curryR(child_of)(peter). curryR(child_of)(peter) : (atom)<= % The denoted value is a relation over atom names
Function calls denote expressions that contain no function calls. That is they denote non-variable terms: atomic values, code names, simple compound terms all the arguments of which are non-variable terms, lists or sets of non-variable terms. The exceptions are certain code returning function calls
which are only evaluated when the code value they denote is itself called.
curryR(child_of)(peter) is an example. It denotes an unary relation but that relation is only used when the unary relation is called in a query such as:
| ?? P ? Rel=curryR(child_of)(peter) & Rel(P). P = harry : atom ... P = mary : atom