/* A depth-first, left-to-right parser. Here is how the parser is called: | ?- parse(s, [the,dog,chased,the,cat], []). yes */ parse(Cat, [Firstword|Restwords], Restwords):- (Cat ==> Firstword). parse(Cat, String, Rest ):- (Cat ==> Daughters), parsedaughters(Daughters, String, Rest). parsedaughters((Cat, Cats), String, Rest):- parse(Cat, String, Next), parsedaughters(Cats, Next, Rest). parsedaughters(Cat, String, Rest):- parse(Cat, String, Rest).