RosettaCodeData/Task/Gray-code/BCPL/gray-code.bcpl

23 lines
473 B
Plaintext

get "libhdr"
let grayEncode(n) = n neqv (n >> 1)
let grayDecode(n) = grayDecodeStep(0, n)
and grayDecodeStep(r, n) =
n = 0 -> r,
grayDecodeStep(r neqv n, n >> 1)
let binfmt(n) =
n = 0 -> 0,
(n & 1) + 10 * binfmt(n >> 1)
let printRow(n) be
$( let enc = grayEncode(n)
let dec = grayDecode(enc)
writef("%I2: %I5 => %I5 => %I5 => %I2*N",
n, binfmt(n), binfmt(enc), binfmt(dec), dec)
$)
let start() be
for i = 0 to 31 do printRow(i)