Sync
This commit is contained in:
parent
6f050a029e
commit
776bba907c
3887 changed files with 59894 additions and 7280 deletions
40
Task/Gray-code/Mercury/gray-code-2.mercury
Normal file
40
Task/Gray-code/Mercury/gray-code-2.mercury
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
:- 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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue