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

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

np(NP) :- pn(NP).

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

vp(VP) :- vi(VP).

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

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


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