- For example, some logic programming languages allow
the unification, constraint solving,
and the search strategies
to be extended with the help of programs written in the
- In our prototypical implementation, only relational
programs access LL programs.
In the case of applications developed by more than one implementor,
the languages for the separate modules can eventually be chosen
according to their preferences or abilities.
- Since in RELFUN these deterministic clauses are compiled into ordinary
WAM code (in order to allow unification and
non-ground computations in
functions), efficiency is not much improved.
- For introductions into the WAM,
refer to [\protect\citeauthoryearGabriel et al.1985],
- In the context of LISP,
data types are usually referred to as
S-expressions (symbolic expressions) [\protect\citeauthoryearMcCarthy et al.1962].
- For reasons of simplicity, relational programs with side effects
will not be covered in this work.
- Thus non-determinism also covers cases where
a predicate is first successful and then enters a non-terminating
- In this work,
only relational languages with PROLOG's
computation and search rule
- Here, determinism is defined dynamically via proof trees. A more common
approach is to define determinism statically, e.g. via non-overlapping
- In analogy to PROLOG indexing, for relations
consisting of many clauses, case statements in addition
to the if/let cascade could be used.
- In special cases, disjointness
can be established by global analysis even for programs without
type declarations [\protect\citeauthoryearDebray and Warren1990].
- The extension of
RELFUN by type definitions and signatures is momentarily worked on.
- The syntax of these declarations is described
in appendix B.
- Since our prototypical implementation does not (yet)
allow LL functions to access (bind) free
REL variables, no
extensions of the unification can be accomplished.
With eager (call-by-value) evaluation
- means incrementing the pointer by cells.
- is the external representation
- is a copy of value in Memory.
- The assembler instructions
.proc and .end mark the beginning and end of
a function or relation.
- ,@ splices into the embedding
- The GAMA is implemented in COMMON LISP; in order to avoid name conflicts,
function names are preceded by a prefix `.' indicating
that a function belongs to module , here gmem
(we did not use the COMMON LISP package system).
- The available types are: NAT for natural numbers, CONST
for constants, FUNCTOR for WAM functor specifications of
the form ( ),
FUNCTION for COMMON LISP functions (e.g. used for ll-builtin),
LABEL for labels, VARIABLE for global (LL) variables,
HASHTABLE for hash tables
(used in the WAM switch instructions),
and X for arbitrary arguments. Additional types can be defined
- case is not yet implemented.
For a survey of indexing, see [\protect\citeauthoryearStein1993] and