If a predicate starts with a ?, then assumes that the rest
is a call to a C function returning a boolean.
Thus it generates this call and checks its result with TRUE (integer
constant 1).
If the called predicate fails, also the rule fails.
Otherwise the rule test is continued.
The list of actual parameters to a call must consist of
simple variables. There is an IN parameter list (before the
==>) and an OUT parameter list (after the ==>). The IN
parameters are considered to be pattern variables which are handed
over to the called routine. The OUT parameters are also handed over
as reference parameters, i.e. their addresses are handed over.