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: