Haskell Language
zipWithM
Поиск…
Вступление
zipWithM
- это zipWith
поскольку mapM
должен map
: он позволяет объединять два списка, используя монадическую функцию.
Из модуля Control.Monad
Синтаксис
- zipWithM :: Аппликация m => (a -> b -> mc) -> [a] -> [b] -> m [c]
Вычисление отпускных цен
Предположим, вы хотите узнать, имеет ли определенный набор цен продажи смысл для магазина.
Первоначально изначально стоимость составляла 5 долларов США, поэтому вы не хотите принимать продажу, если цена продажи меньше для любого из них, но вы хотите знать, что означает новая цена.
Вычисление одной цены легко: вы рассчитываете продажную цену и возвращаете Nothing
если вы не получаете прибыль:
calculateOne :: Double -> Double -> Maybe Double
calculateOne price percent = let newPrice = price*(percent/100)
in if newPrice < 5 then Nothing else Just newPrice
Чтобы вычислить его для всей продажи, zipWithM
делает это очень простым:
calculateAllPrices :: [Double] -> [Double] -> Maybe [Double]
calculateAllPrices prices percents = zipWithM calculateOne prices percents
Это не вернет Nothing
если какая-либо из продажных цен будет ниже 5 долларов США.
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow