s --> np(subject), vp. 
np(_) --> det, n.                   
np(X) --> pro(X). 
vp --> v, np(object). 
vp --> v. 
det --> [the].               
det --> [a]. 
n --> [woman].        
n --> [man].  
v --> [shoots]. 
pro(subject) --> [he]. 
pro(subject) --> [she]. 
pro(object) --> [him]. 
pro(object) --> [her]. 

prolog(Goal) :- once(look(Goal,How)), leap(How).

look(true,skip).
look((X,Y),and(X,Y)).
look(X,    call(X)) :- predicate_property(X,built_in).
look(X,    do(X)).

leap(skip).
leap(and(X,Y)) :- prolog(X), prolog(Y).
leap(call(X)) :- call(X).
leap(do(X)) :- clause(X,Body), prolog(Body).

demo :-
	s(Sentence1,[]),
	prolog(s(Sentence2,[])),
	format('1 : ~p\n2 : ~p\n',[Sentence1,Sentence2]).
	
