s(P0, P) :- np(P0, P1), vp(P1, P). np(P0, P) :- pn(P0, P). np(P0, P) :- det(P0, P1), n(P1, P2), optrel(P2, P). vp(P0, P) :- tv(P0, P1), np(P1, P). vp(P0, P) :- iv(P0, P). optrel(P,P). optrel(P0,P) :- connects(that, P0, P1), vp(P1,P). pn(P0, P) :- connects(harry, P0, P). pn(P0, P) :- connects(barry, P0, P). iv(P0, P) :- connects(walks, P0, P). tv(P0, P) :- connects(sees, P0, P). det(P0, P) :- connects(the, P0, P). n(P0, P) :- connects(frog, P0, P). /* tedious statement of sentence */ connects(harry, 0, 1). connects(sees, 1, 2). connects(the, 2, 3). connects(frog, 3, 4). connects(that, 4, 5). connects(walks, 5, 6). %| ?- [dcg0]. %% consulting /amd/nfs/pegasus/disk/ptn053/steedman/lectures/tl/dcg0... %% consulted /amd/nfs/pegasus/disk/ptn053/steedman/lectures/tl/dcg0 in module user, 0 msec -88 bytes %yes %| ?- s(0,6). %yes %| ?- s(0,5). %no %| ?- s(0,4). %yes %| ?-