sentence(S0) :- noun_phrase(S0,S1), verb_phrase(S1,[]).
noun_phrase(S0,S) :- parse_name(S0,S).
noun_phrase(S0,S) :- parse_determiner(S0,S1), parse_noun(S1,S).
verb_phrase(S0,S) :- parse_verb(S0,S).
verb_phrase(S0,S) :- parse_verb(S0,S1), noun_phrase(S1,S).

parse_determiner([X|S],S) :- determiner(X).
parse_noun([X|S],S):- noun(X).
parse_verb([X|S],S) :- verb(X).
parse_name([X|S],S) :- name(X). 

name(billy).
name(john).
name(fiona).
name(mary).
noun(vase).
noun(lamp).
noun(sandwich).
noun(apple).
noun(hammer).
noun(rock).
verb(breaks).
verb(loves).
verb(eats).
determiner(the).
determiner(a).



