Four bit adder: Difference between revisions

Content added Content deleted
m (J: clarify wording)
(→‎{{header|Haskell}}: replace adder function with one with 4 visible fulladders)
Line 724: Line 724:
xor a b = uncurry nand. (nand a &&& nand b) $ nand a b</lang>
xor a b = uncurry nand. (nand a &&& nand b) $ nand a b</lang>
Adder circuits:
Adder circuits:
<lang haskell>halfAdder = (uncurry band &&& uncurry xor)
<lang haskell>halfAdder = uncurry band &&& uncurry xor
fullAdder (c, a, b) = (\(cy,s) -> first (bor cy) $ halfAdder (b, s)) $ halfAdder (c, a)
fullAdder (c, a, b) = (\(cy,s) -> first (bor cy) $ halfAdder (b, s)) $ halfAdder (c, a)


add as = foldr (\(a,b) (cy,xs) -> second(:xs)$ fullAdder (cy,a,b)) (0,[]). zip as</lang>
adder4 as = foldr (\(f,a,b) (cy,bs) -> second(:bs) $ f (cy,a,b)) (0,[]). zip3 (replicate 4 fullAdder) as</lang>


Example using add
Example using add