Ethiopian multiplication: Difference between revisions

m
(→‎{{header|TypeScript}}: Standard functions are applied to format numbers.)
Line 2,585:
 
----------------- ETHIOPIAN MULTIPLICATION ---------------
 
ethMult ::
ethMult :: (Monoid m) => Int -> m -> m
Int ->
m ->
m
ethMult n m =
foldr addedWhereOdd mempty $
zip (unfoldr half n) $ iterate (join (<>)) m
 
where
half :: Integral b => b -> Maybe (b, b)
half n
| 0 /= n = Just . swap $ quotRem n 2
| otherwise = Nothing
addedWhereOdd (d, x) a
 
| 0 /= d = a <> x
addedWhereOdd :: (Eq a, Num a, Semigroup p) => (a, p) -> p -> p
| otherwise = a
addedWhereOdd (d, x) a
| 0 /= d = a <> x
| otherwise = a
 
--------------------------- TEST -------------------------
9,655

edits