26 lines
516 B
Standard ML
26 lines
516 B
Standard ML
fun gray_encode b =
|
|
Word.xorb (b, Word.>> (b, 0w1))
|
|
|
|
fun gray_decode n =
|
|
let
|
|
fun aux (p, n) =
|
|
if n = 0w0 then p
|
|
else aux (Word.xorb (p, n), Word.>> (n, 0w1))
|
|
in
|
|
aux (n, Word.>> (n, 0w1))
|
|
end;
|
|
|
|
val s = Word.fmt StringCvt.BIN;
|
|
fun aux i =
|
|
if i = 0w32 then
|
|
()
|
|
else
|
|
let
|
|
val g = gray_encode i
|
|
val b = gray_decode g
|
|
in
|
|
print (Word.toString i ^ " :\t" ^ s i ^ " => " ^ s g ^ " => " ^ s b ^ "\t: " ^ Word.toString b ^ "\n");
|
|
aux (i + 0w1)
|
|
end;
|
|
aux 0w0
|