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