Go backward to Negation
Go up to Top
Go forward to Natural Language Analysis

Interpreters

  • Meta-interpreters
  • Meta-interpreters

    What is a meta-interpreter? It is an interpreter, written in some language, which takes a program in that language as data.(1)

    Why are meta-interpreters interesting? They give us greater insight into the computation mechanism of the language. They also afford us the opportunity to examine in detail and perhaps change the computation mechanism of the language.

    A very simple meta-interpreter for Prolog is

    solve(Goal) :- Goal.
    
    A slightly more interesting one is
    solve(true).
    solve((A,B)) :-
    	solve(A),
    	solve(B).
    solve(Goal) :- rule(Goal,Body), solve(Body).
    
    To deal with Prolog builtin predicates:
    solve(true).
    solve((A,B)) :-
    	solve(A),
    	solve(B).
    solve(Goal) :-
    	builtin(Goal),
    	Goal.
    solve(Goal) :- rule(Goal,Body), solve(Body).
    
    builtin(_ \== _).
    
    rule(member1(X,[X|_]),true).
    rule(member1(X,[Head|Tail]),(X \== Head, member1(X,Tail))).
    
    rule(member(X,[X|_]),true).
    rule(member(X,[_|Tail]),(member(X,Tail))).
    
    To build a proof tree:
    solve(true,true).
    solve((A,B),(ProofA,ProofB)) :-
    	solve(A,ProofA),
    	solve(B,ProofB).
    solve(G,(G:-builtin)) :-
    	builtin(G),
    	call(G).
    solve(Goal,(Goal:-Proof)) :- rule(Goal,Body), solve(Body,Proof).
    
    builtin(_ \== _).
    
    rule(member1(X,[X|_]),true).
    rule(member1(X,[Head|Tail]),(X \== Head, member1(X,Tail))).
    
    rule(member(X,[X|_]),true).
    rule(member(X,[_|Tail]),(member(X,Tail))).
    
    In the assignment you need to keep track of the resolvent: the set of goals which remain to be proved at each node in the search tree.
    horsch@cs.ubc.ca

    Go backward to Negation
    Go up to Top
    Go forward to Natural Language Analysis