Note that the following preprocessor assumes that the pack of the form a, (b, (c or d or e) or f or g, (h or i or j)) was already transformed to the form a , or([(b, or([c,d,e])), f, (g, or([h,i,j]))]).
preprocess((A,B),(A,NewB),PrevNode,NodeNr0,LeafNr0,BranchNr,NodeNr1,LeafNr1):- !, preprocess(B,NewB,PrevNode,NodeNr0,LeafNr0,BranchNr,NodeNr1,LeafNr1). preprocess(or(Querys),or(NQuerys,PrevNode,NodeNr0,BranchNr,Length), PrevNode,NodeNr0,LeafNr0,BranchNr,NodeNr1,LeafNr1):- !, NodeNr2 is NodeNr0 + 1, preprocessbranches(Querys,NQuerys,NodeNr0,NodeNr2,LeafNr0, 1,NodeNr1,LeafNr1,Length). preprocess(A,(A,leaf(PrevNode,BranchNr,LeafNr0)), PrevNode,NodeNr0,LeafNr0,BranchNr,NodeNr0,LeafNr1):- LeafNr1 is LeafNr0 + 1. preprocessbranches([],[],_,NodeNr,LeafNr,BranchNr, NodeNr,LeafNr,BranchNr). preprocessbranches([Query|Querys],[NewQuery|NewQuerys],PrevNode, NodeNr0,LeafNr0,BranchNr,NodeNr1,LeafNr1,Length):- preprocess(Query,NewQuery, PrevNode,NodeNr0,LeafNr0,BranchNr,NodeNr2,LeafNr2), BranchNr1 is BranchNr + 1, preprocessbranches(Querys,NewQuerys,PrevNode, NodeNr2,LeafNr2,BranchNr1,NodeNr1,LeafNr1,Length).