:- op(1200,xfx,'==>'). parse(NT, P_0, P) :- (NT ==> Body), parse(Body, P_0, P). parse((Body1, Body2), P_0, P) :- parse(Body1, P_0, P_1), parse(Body2, P_1, P). parse([], P, P). parse([Word|Rest], P_0, P) :- connect(Word, P_0, P_1), parse(Rest, P_1, P). parse({Goals}, P, P) :- call(Goals). connect(W, [W|R], R).