Zoeken…


Invoering

zipWithM is naar zipWith zoals mapM is naar map : hiermee kunt u twee lijsten combineren met een monadische functie.

Van de module Control.Monad

Syntaxis

  • zipWithM :: Applicative m => (a -> b -> mc) -> [a] -> [b] -> m [c]

Berekening verkoopprijzen

Stel dat u wilt zien of een bepaalde set verkoopprijzen zinvol is voor een winkel.

De items kosten oorspronkelijk $ 5, dus u wilt de verkoop niet accepteren als de verkoopprijs voor een van hen lager is, maar u wilt wel weten wat de nieuwe prijs anders is.

Eén prijs berekenen is eenvoudig: u berekent de verkoopprijs en retourneert Nothing als u geen winst krijgt:

calculateOne :: Double -> Double -> Maybe Double
calculateOne price percent = let newPrice = price*(percent/100)
                             in if newPrice < 5 then Nothing else Just newPrice

Om het voor de hele verkoop te berekenen, maakt zipWithM het heel eenvoudig:

calculateAllPrices :: [Double] -> [Double] -> Maybe [Double]
calculateAllPrices prices percents = zipWithM calculateOne prices percents

Dit levert Nothing als een van de verkoopprijzen lager is dan $ 5.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow