:- module gray_test. :- interface. :- import_module io. :- pred main(io::di, io::uo) is det. :- implementation. :- import_module gray. :- import_module int, list, string. :- pred check_conversion(list(int)::in, list(gray)::out) is semidet. :- pred display_lists(list(int)::in, list(gray)::in, io::di, io::uo) is det. :- pred display_record(int::in, gray::in, io::di, io::uo) is det. main(!IO) :- Numbers = 0..31, ( check_conversion(Numbers, Grays) -> io.format("%8s %8s %8s\n", [s("Number"), s("Binary"), s("Gray")], !IO), io.format("%8s %8s %8s\n", [s("------"), s("------"), s("----")], !IO), display_lists(Numbers, Grays, !IO) ; io.write("Either conversion or back-conversion failed.\n", !IO)). check_conversion(Numbers, Grays) :- Grays = list.map(gray.from_int, Numbers), Numbers = list.map(gray.to_int, Grays). display_lists(Numbers, Grays, !IO) :- list.foldl_corresponding(display_record, Numbers, Grays, !IO). display_record(Number, Gray, !IO) :- gray.coerce(Gray, GrayRep), NumBin = string.int_to_base_string(Number, 2), GrayBin = string.int_to_base_string(GrayRep, 2), io.format("%8d %8s %8s\n", [i(Number), s(NumBin), s(GrayBin)], !IO). :- end_module gray_test.