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 = 0 then o = []; c_out = 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 main(a:[4], b:[4]) = (o:[4], c) where (o, c) = adder<4>(a,b,0) end where