oso*_*nyj 1 recursion haskell function map-function
我有一个功能:
mapAtOriginal :: (a -> a) -> [Int] -> [a] -> [a]
mapAtOriginal f is xs = helper 0 is xs
where
helper _ [] xs = xs
helper c (i:is) (x:xs)
| c < i = x : helper (c+1) (i:is) xs
| otherwise = f x : helper (c+1) is xs
Run Code Online (Sandbox Code Playgroud)
它是这样的:
mapAtOriginal (*2) [0,3] [1,2,3,4] -- == [2,2,3,8]
Run Code Online (Sandbox Code Playgroud)
因此,我想使用map功能重写它。我知道这map适用于列表的每个元素,但是,我只需要将其应用于特定的索引。
我该怎么做?
map不知道它在“列表中的位置”。因此,您首先需要将该信息编码为元素本身。可以使用来完成此操作zip [0..],基本上可以用每个元素的出现位置注释每个元素。
然后,在函数you中map,您只需要在注释元组上进行模式匹配,并使用an if来决定是否将操纵器函数应用于其他元组元素。
请注意,组合zip和map总是等同于单次zipWith,所以这就是你应该preferrably使用。