Haskell Language
zipWithM
Sök…
Introduktion
zipWithM
är att zipWith
som mapM
är att map
: det låter dig kombinera två listor med en monadisk funktion.
Från modulen Control.Monad
Syntax
- zipWithM :: Applicativ m => (a -> b -> mc) -> [a] -> [b] -> m [c]
Beräkningar försäljningspriser
Anta att du vill se om en viss uppsättning försäljningspriser är meningsfull för en butik.
Varorna kostar ursprungligen $ 5, så du vill inte acceptera försäljningen om försäljningspriset är lägre för någon av dem, men du vill veta vad det nya priset annars är.
Att beräkna ett pris är enkelt: du beräknar försäljningspriset och returnerar Nothing
om du inte får en vinst:
calculateOne :: Double -> Double -> Maybe Double
calculateOne price percent = let newPrice = price*(percent/100)
in if newPrice < 5 then Nothing else Just newPrice
För att beräkna det för hela försäljningen gör zipWithM
det riktigt enkelt:
calculateAllPrices :: [Double] -> [Double] -> Maybe [Double]
calculateAllPrices prices percents = zipWithM calculateOne prices percents
Detta returnerar Nothing
om något av försäljningspriserna är under $ 5.
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow