Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
30
Task/Gray-code/Mercury/gray-code-1.mercury
Normal file
30
Task/Gray-code/Mercury/gray-code-1.mercury
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
:- module gray.
|
||||
|
||||
:- interface.
|
||||
:- import_module int.
|
||||
|
||||
:- type gray.
|
||||
|
||||
% VALUE conversion functions
|
||||
:- func gray.from_int(int) = gray.
|
||||
:- func gray.to_int(gray) = int.
|
||||
|
||||
% REPRESENTATION conversion predicate
|
||||
:- pred gray.coerce(gray, int).
|
||||
:- mode gray.coerce(in, out) is det.
|
||||
:- mode gray.coerce(out, in) is det.
|
||||
|
||||
:- implementation.
|
||||
|
||||
:- import_module list.
|
||||
|
||||
:- type gray
|
||||
---> gray(int).
|
||||
|
||||
gray.from_int(X) = gray(X `xor` (X >> 1)).
|
||||
|
||||
gray.to_int(gray(G)) = (G > 0 -> G `xor` gray.to_int(gray(G >> 1))
|
||||
; G).
|
||||
gray.coerce(gray(I), I).
|
||||
|
||||
:- end_module gray.
|
||||
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