- ...itself.
- 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
language itself.
- ...other:
- In our prototypical implementation, only relational
programs access LL programs.
- ...interfaces.
-
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.
- ...clauses:
- 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.
- ...required.
- For introductions into the WAM,
refer to [\protect\citeauthoryearGabriel et al.1985]
,
[\protect\citeauthoryearAt-Kaci1990]
, and
[\protect\citeauthoryearVan Roy1994]
.
- ...types
- In the context of LISP,
data types are usually referred to as
S-expressions (symbolic expressions) [\protect\citeauthoryearMcCarthy et al.1962].
- ...deterministic
- For reasons of simplicity, relational programs with side effects
will not be covered in this work.
- ...solution)
- Thus non-determinism also covers cases where
a predicate is first successful and then enters a non-terminating
branch.
- ...languages
- In this work,
only relational languages with PROLOG's
computation
and search rule
are considered.
- ...PROLOG
- Here, determinism is defined dynamically via proof trees. A more common
approach is to define determinism statically, e.g. via non-overlapping
clause heads.
- ...statements.
- In analogy to PROLOG indexing
, for relations
consisting of many clauses, case statements in addition
to the if/let cascade could be used.
- ...declaration.
- In special cases, disjointness
can be established by global analysis even for programs without
type declarations [\protect\citeauthoryearDebray and Warren1990]
.
- ...RELFUN
- The extension of
RELFUN by type definitions and signatures is momentarily worked on.
- ...declarations
- The syntax of these declarations is described
in appendix B.
- ...LL.
- Since our prototypical implementation does not (yet)
allow LL functions to access (bind) free
REL
variables, no
extensions of the unification
can be accomplished.
- ...functional
-
With eager (call-by-value
) evaluation
- ...equal.
means incrementing the pointer
by
cells.
- ...expression.
is the external representation
of expr.
- ...used.
is a copy of value in Memory.
- ...is
- The assembler instructions
.proc and .end mark the beginning and end of
a function or relation.
- ...#compsimplebui>)
- ,@
splices
into the embedding
list.
- ...functions
- 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).
- ...arguments
- 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
with gasm.deftype.
- ...statements
- case is not yet implemented.
- ...indexing
-
For a survey of indexing, see [\protect\citeauthoryearStein1993]
and
[\protect\citeauthoryearSintek1993]
Harold Boley & Michael Sintek (sintek@dfki.uni-kl.de)