Haskell Language
zipWithM
Ricerca…
introduzione
zipWithM
dire zipWith
come mapM
deve map
: ti permette di combinare due liste usando una funzione monadica.
Dal modulo Control.Monad
Sintassi
- zipWithM :: Applicativo m => (a -> b -> mc) -> [a] -> [b] -> m [c]
Calcolo dei prezzi di vendita
Supponiamo che tu voglia vedere se un certo insieme di prezzi di vendita ha senso per un negozio.
Gli articoli inizialmente costano $ 5, quindi non si desidera accettare la vendita se il prezzo di vendita è inferiore per ognuno di essi, ma si desidera sapere quale sia il nuovo prezzo altrimenti.
Calcolare un prezzo è semplice: calcoli il prezzo di vendita e restituisci Nothing
se non ottieni un profitto:
calculateOne :: Double -> Double -> Maybe Double
calculateOne price percent = let newPrice = price*(percent/100)
in if newPrice < 5 then Nothing else Just newPrice
Per calcolarlo per l'intera vendita, zipWithM
rende davvero semplice:
calculateAllPrices :: [Double] -> [Double] -> Maybe [Double]
calculateAllPrices prices percents = zipWithM calculateOne prices percents
Ciò restituirà Nothing
se uno qualsiasi dei prezzi di vendita è inferiore a $ 5.
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow