我想使用 Data.Map.map 函数对 Double 进行求和。
所以我想要一个这样的功能:
sumTheDoubles :: Mapping.Map Char [(Char, Double)] -> Mapping.Map Char [(Char, Double)]
我想用 Data.Map.map 函数对所有 double 求和:
可以说
sumTheDoubles (fromList [('i', [('a', 1.0), ('n', 2.0)])])
应该做:1.0 + 2.0 -->
(fromList [('i', [('a', 3.0), ('n', 3.0)])])
但我的主要问题是,我并不真正了解如何使用 Data.Map.map 函数访问 double 。
最佳答案
渐渐地,我得到了这个单线:
sumTheDoubles' f = Mapping.map (\a -> map ((\b -> \(c,d) -> (c,b)) ((sum.map snd) a)) a) f
我是如何得到这个结果的? 我从最高级别开始。然后我根据需要定义了越来越多的函数。我总是首先确定单个功能的类型。最后,我将函数转换为 lambda 形式(从底部开始)并将它们应用到顶层。
module Main where
import qualified Data.Map as Mapping
sumTheDoubles :: Mapping.Map Char [(Char, Double)] -> Mapping.Map Char [(Char, Double)]
sumTheDoubles a = Mapping.map map2 a
-- combine sum and replace
map2 :: [(Char, Double)] -> [(Char, Double)]
map2 a = map (map3 $ map4 a) a
-- replace snd
map3 :: Double -> (Char, Double) -> (Char, Double)
map3 a (b,c) = (b,a)
-- sum Doubles
map4 :: [(Char, Double)] -> Double
map4 a = (sum.map snd) a
main = putStrLn $ show $ sumTheDoubles $ Mapping.fromList [('i', [('a', 1.0), ('n', 2.0)])]
输出:
fromList [('i',[('a',3.0),('n',3.0)])]
关于haskell - 使用 Data.Map.map 对值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70688831/