:- 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).
