repeat(a) = (x:[n]) where if n = 1 then x = a else if n - (2 * (n / 2)) = 1 then u = repeat(a); x = a . u . u else u = repeat(a); x = u . u end if end if end where fulladder(a,b,c) = (s, r) where s = (a ^ b) ^ c; r = (a & b) + ((a ^ b) & c); end where adder(a:[n], b:[n], c_in) = (o:[n], c_out) where if n = 1 then (o, c_out) = fulladder(a[0], b[0], c_in) else (s_n, c_n1) = fulladder(a[0], b[0], c_in); (s_n1, c_out) = adder(a[1..], b[1..], c_n1); o = s_n . s_n1 end if end where equal(a:[n]) = (eq) where if n = 0 then eq = 1 else if m - (2 * (m / 2)) = 1 then eq = a[0] & equal(a[1..]); else eq = (not a[0]) & equal(a[1..]); end if end if end where reg_n(a:[n]) = (r:[n]) where if n = 1 then r = reg a[0] else r = (reg a[0]) . (reg_n(a[1..])) end if end where and_each(a, b:[n]) = (o:[n]) where if n = 1 then o = b[0] and a else o = (b[0] and a) . and_each(a, b[1..]) end if end where count_mod(in:[n], op) = (out:[n], reset) where (incr, carry) = adder(in, op . repeat(0), 0); reset = equal(incr); neq = not reset; out = and_each(neq, incr); end where main(tick) = (count_sec:[6],count_min:[6],count_hour:[5],next_day) where (count_sec, aug_min) = count_mod<6, 60>(save_sec, tick); save_sec = reg_n<6>(count_sec); (count_min, aug_hour) = count_mod<6, 60>(save_min, aug_min); save_min = reg_n<6>(count_min); (count_hour, next_day) = count_mod<5, 24>(save_hour, aug_hour); save_hour = reg_n<5>(count_hour) end where