Four bit adder: Difference between revisions

Added 11l
m (→‎{{header|REXX}}: aligned wording in the REXX section header.)
(Added 11l)
Line 32:
<div style="clear:both"></div>
<br><br>
 
=={{header|11l}}==
{{trans|Python}}
 
<lang 11l>F xor(a, b)
R (a & !b) | (b & !a)
 
F ha(a, b)
R (xor(a, b), a & b)
 
F fa(a, b, ci)
V (s0, c0) = ha(ci, a)
V (s1, c1) = ha(s0, b)
R (s1, c0 | c1)
 
F fa4(a, b)
V width = 4
V ci = [0B] * width
V co = [0B] * width
V s = [0B] * width
L(i) 0 .< width
(s[i], co[i]) = fa(a[i], b[i], I i != 0 {co[i - 1]} E 0)
R (s, co.last)
 
F int2bus(n, width = 4)
R reversed(bin(n).zfill(width)).map(c -> Int(c))
 
F bus2int(b)
R sum(enumerate(b).filter2((i, bit) -> bit).map2((i, bit) -> 1 << i))
 
V width = 4
V tot = [0B] * (width + 1)
L(a) 0 .< 2 ^ width
L(b) 0 .< 2 ^ width
V (ta, tlast) = fa4(int2bus(a), int2bus(b))
L(i) 0 .< width
tot[i] = ta[i]
tot[width] = tlast
assert(a + b == bus2int(tot), ‘totals don't match: #. + #. != #.’.format(a, b, String(tot)))</lang>
 
=={{header|Ada}}==
1,480

edits