Haskell:将函数映射到列表列表

use*_*032 8 haskell function list map

如何映射函数以对列表中的列表进行操作?以下是我正在尝试做的一个例子,但我只是问一般问题.提前致谢!

现在,我正在尝试将一个函数映射到一个列表的每个列表(由itrCol xs返回).

evalChange xs = map change $ itrCol xs
Run Code Online (Sandbox Code Playgroud)

其中itrCol返回列表列表,其中每个列表都是一列.

itrCol xs = [getCol x xs | x <- (take (width xs) (iterate (\x -> (x + 1)*1) 0))]
Run Code Online (Sandbox Code Playgroud)

getCol列出列给定的列索引列表

getCol :: Int -> [t] -> [t]
Run Code Online (Sandbox Code Playgroud)

并改变是:

change []     = []
change [x]    = [x]
change [x,y]  = [x,y]
change (x:y:z:ws) | x == y && y == z = 0 : y*(-1) : 0 : change ws
change (x:xs) =  x : change xs
Run Code Online (Sandbox Code Playgroud)

luq*_*qui 12

看一下这个!

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

等等


Joh*_*son 6

可以使用currying和另一个map来调用.

map (map change) $ itrCol xs
Run Code Online (Sandbox Code Playgroud)

要了解有关currying的更多信息,请参阅Learn You A Haskell中的那一章,这是Haskell中一本很棒的入门书.