Adding equations to NU-Prolog
This paper describes an extension to NU-Prolog which allows
evaluable functions to be defined using equations. We consider
it to be the most pragmatic way of combining functional and
relational programming. The implementation consists of several
hundred lines of Prolog code and the underlying Prolog
implementation was not modified at all. However, the system is
reasonably efficient and supports coroutining, optional lazy
evaluation, higher order functions and parallel execution.
Efficiency is gained in several ways. First, we use some new
implementation techniques. Second, we exploit some of the unique
features of NU-Prolog, though these features are not essential to
the implementation. Third, the language is designed so that we
can take advantage of implicit mode and determinism information.
Although we have not concentrated on the semantics of the
language, we believe that our language design decisions and
implementation techniques will be useful in the next generation
of combined functional and relational languages.
Keywords: logic programming, equations, functions, parallelism,
indexing, lazy evaluation, higher order.