Note that I did restrict a grammar to consist only of a set of definite clauses defining the predicate sign/1. However, I will also use definite clauses of () to define meta-interpreters for such grammars. For these meta-interpreters I will assume the operational semantics sketched above. In such cases I treat the definite clauses defining sign as data; a clause:
is represented as
the clause
i.e. the body of the clause is represented as a list. A
meta-interpreter for
() thus may be defined as in
program 6, which follows the procedural semantics of
(),
i.e. it is a top-down proof procedure with a left-most computation
rule and a depth-first search rule.
For example, a rightmost computation rule can be implemented by
defining the predicate
refutations as follows: