






:- op(wpp_quant(question(Vars,Quant),Col) :-
   indent(question,Col,NewCol),
   wi(Vars,NewCol),
   pp_quant(Quant,NewCol).
pp_quant(quant(Det,X,Head,Quant,QuantList,Y),Col) :-
   indent(quant,Col,NewCol),
   wi(Det,NewCol),
   wi(X,NewCol),
   pp_head(Head,NewCol),
   pp_quant(Quant,NewCol),
   pp_quant_list(QuantList,NewCol)wi(Y,NewCol).
pp_quant(pred(Quant,Op,Pred,QuantList),Col) :-
   indent(pred,Col,NewCol),
   pp_quant(Quant,NewCol),
   wi(Op,NewCol),
   wi(Pred,NewCol),
   pp_quant_list(QuantList,NewCol).
pp_quant(conj(Conj,QuantA,QuantListA,QuantB,QuantListB), Col) :-
   indent(conj,Col,NewCol),
   wi(Conj,NewCol),
   pp_quant(QuantA,NewCol),
   pp_quant_list(QuantListA,NewCol),
   pp_quant(QuantB,NewCol),
   pp_quant_list(QuantListB,NewCol).
pp_quant(QuantA & QuantB,Col) :-
   indent(&,Col,NewCol),
   pp_quant(QuantA,NewCol),
   pp_quant(QuantB,NewCol).
pp_quant($$$ Pred, Col) :-
   wi($$$ Pred, Col).

pp_head($$$ Pred,Col) :-
   wi($$$ Pred, Col).
pp_head(apply(Var,Pred),Col) :-
   indent(apply,Col,NewCol),
   wi(Var,NewCol),



wi(Pred,NewCol).
pp_head(aggr(Aggr,Var,VarList,Head,Quant),Col) :-
   indent(aggr,Col,NewCol),
   wi(Aggr,NewCol),     /* possible omission? */
   wi(Var,NewCol),
   wi(VarList,NewCol),
   pp_head(Head,NewCol),
   pp_quant(Quant,NewCol).

pp_quant_list([],Col) :-
   wi([],Col).
pp_quant_list([Quant|QuantList],Col) :-
   indent('[',Col,NewCol),
   pp_quant(Quant,NewCol),
   ppl0(QuantList,NewCol).

ppl0([],Col) :-
   Col0 is Col - 2,
   wi(']',Col0).
ppl0([Quant|QuantList],Col) :-
   pp_quant(Quant,Col),
   ppl0(QuantList,Col).

indent(Name,Col,NewCol) :-
   wi(Name,Col),
   NewCol is Col+2.


wi(Term,Col) :-
   tab(Col), write(Term), nl.
