在haskell的双重地图?

Sha*_*ane 16 mapping haskell

我仍然是一名哈斯克尔初学者.我可以在哈斯克尔做双重地图吗?

例如,如果我有一个[[Char]]并且我想将每个Char中的每个转换[Char]为小写,那么有一种简单的方法可以做到这一点,而不是像:

exampleF [] = []
exampleF (x:xs) = (map toLower x) : exampleF xs
Run Code Online (Sandbox Code Playgroud)

luq*_*qui 24

事实上,这里有一个很好的模式:

map           :: (a -> b) ->   [a]   ->   [b]
(map.map)     :: (a -> b) ->  [[a]]  ->  [[b]]
(map.map.map) :: (a -> b) -> [[[a]]] -> [[[b]]]
Run Code Online (Sandbox Code Playgroud)

等等


ham*_*mar 21

您可以想到map f,将函数f :: a -> b转换为列表中的函数map f :: [a] -> [b],因此如果要将其进一步转换为列表列表中的函数,则只需map再次使用即可map (map f) :: [[a]] -> [[b]].

在这种特殊情况下,这变为:

exampleF = map (map toLower)
Run Code Online (Sandbox Code Playgroud)

  • `exampleF xss = map(\ xs - > map toLower xs)xss` - 如果让你感觉更好的话,可以另外写一下.然而,哈马尔写它的方式是鼓励的(因为它减少了,实际上是免费的).如果你还没有,你会习惯的. (3认同)