/*
solve(Goal) :-
Goal is true given the pure Prolog program defined by clause/2.
*/
solve(Goal) :- solve(Goal,[]).
solve([],[]).
solve([],[G|Goals]) :- solve(G,Goals).
solve([A|B],Goals) :- append(B,Goals,Goals1),solve(A,Goals1).
solve(A,Goals) :- rule(A,B), solve(B,Goals).
% Program 17.6 A meta-interpreter for pure Prolog in continuation style