FFOIL is a derivative of FOIL that is specialised on learning functional
relations. A functional relation is a relation where one or more arguments are
distinguished as output arguments, and in any tuple of constants
belonging to the relation
the values of the output arguments are uniquely determined by the values
of the other arguments.
FFOIL is restricted on learning functions with a
single output argument.
Conceptually, FFOIL is rather close to FOIL, as the general search
strategy as well as the criterion for selecting literals (that is, the
information gain heuristic) remain unchanged.
The most fundamental difference concerns the interpretation and evaluation of
the partial clauses that are taken into consideration during the search process
FFOIL, in contrast to FOIL, takes into
account the special role of the output variable.
As this affects the computation of the information gain of a literal,
the clauses derived by FFOIL generally differ from those
learned by FOIL. Another consequence of the modification is that
the clauses found by FFOIL have to be interpreted in the order
in which they were derived, and each clause has to be ended with
a cut (`!').
Thus, the clauses found by FFOIL make up a decision list.
When answering a query, the decision list returns the answer of
the first clause in the ordered list which succeeds in answering the
In contrast, the order is not crucial for the clauses found by
I.W. moved explanation of decision lists from Foidl to Ffoil
Being the more general approach, FOIL is able to learn functional
relations as well, but the specialised version
FFOIL performs better on the more special task in several respects.
FFOIL does not require negative examples, and it
derives clauses where the output variable is guaranteed to be bound.
Furthermore, FFOIL often finds programs that execute
than those found by FOIL.
Finally, FFOIL generally requires less time for learning than
Learning first-order definitions of functions.
Journal of Artificial Intelligence Research, 5:139-161, 1996.