:- module write_canonical. % synopsis: Shows the canonical output of a parsed term as defined by % various operators. % author: Douglas M. Auclair, DMA % date: January 5, 2006 :- interface. :- import_module io, term. :- pred write_canonical(term(T)::in, io::di, io::uo) is det. :- implementation. :- import_module list, string. write_canonical(Term) --> { Term = functor(atom(Fn), List, _) } -> format("%s", [s(Fn)]), write_canonical_list(List) ; { Term = functor(integer(Int), _, _) } -> write(Int) ; write(Term). :- pred write_canonical_list(list(term(T))::in, state::di, state::uo) is det. write_canonical_list([]) --> []. write_canonical_list([H|T]) --> print("("), write_canonical(H), write_canonical_list_aux(T), print(")"). :- pred write_canonical_list_aux(list(term(T)), state, state). :- mode write_canonical_list_aux(in, di, uo) is det. write_canonical_list_aux([]) --> []. write_canonical_list_aux([H|T]) --> print(", "), write_canonical(H), write_canonical_list_aux(T).