pn([mary]).   n([clown]).    det([a]).
vi([laughs]).   vt([loves]).   vs([thinks]).

s(S) :- append(NP,VP,S),
        np(NP),
        vp(VP).

np(NP) :- pn(NP).

np(NP) :- append(Det,N,NP),
          det(Det),
          n(N).

vp(VP) :- vi(VP).

vp(VP) :- append(VT,NP,VP),
          vt(VT), 
          np(NP).

vp(VP) :- append(VS,S,VP),
          vs(VS), 
          s(S).

append([],L,L).
append([H|T],L,[H|R]) :-
	append(T,L,R).
