:- dynamic ('-->>'/2). s(Np,Vp) -->> np(Np), vp(Vp). vp(V,Np) -->> verb(V), np(Np). vp(V,nil) -->> verb(V). np(N,D) -->> det(D), noun(N). np(N,nil) -->> noun(N). det(W) -->> [W],{cat(W,det)}. noun(W) -->> [W],{cat(W,noun)}. verb(W) -->> [W],{cat(W,verb)}. cat(the,det). cat(a,det). cat(man,noun). cat(fish,noun). cat(eats,verb). cat(catches,verb).