sentence(Z) :- append(X,Y,Z) & np(X) & vp(Y) np([X]) :- noun(X) np(X!and!Y) :- noun(X) & np(Y) vp(X!Y) :- verb(X) & np(Y) noun(mary) noun(pat) noun(quincy) verb(like) verb(likes) append(nil,Y,Y) append(X!Y,Z,X!W) :- append(Y,Z,W)