s(C)  :- np(A),  vp(B), append(A,B,C).
np(C) :- det(A), n(B),  append(A,B,C).
vp(C) :- v(A)  , np(B), append(A,B,C).

det([a]).      n([cat]).
det([the]).    n([fish]).    v([eats]).