Zar*_*oth 5 iteration reverse haskell list
我正在尝试编写一个给出数字列表的函数,返回一个列表,其中每个第二个数字的值加倍,从最后一个元素开始.因此,如果列表元素是1..n,则第n个将保持原样,(n-1)-th将在值中加倍,(n-2)-th将被保留原样等
所以这就是我如何解决它:
MyFunc :: [Integer] -> [Integer]
MyFunc xs = reverse (MyFuncHelper (reverse xs))
MyFuncHelper :: [Integer] -> [Integer]
MyFuncHelper [] = []
MyFuncHelper (x:[]) = [x]
MyFuncHelper (x:y:zs) = [x,y*2] ++ MyFuncHelper zs
Run Code Online (Sandbox Code Playgroud)
它有效:
MyFunc [1,1,1,1] = [2,1,2,1]
MyFunc [1,1,1] = [1,2,1]
Run Code Online (Sandbox Code Playgroud)
但是,我不禁想到必须有一个更简单的解决方案,而不是反转列表,处理它然后再次反转它.我可以简单地向后迭代列表吗?如果有,怎么样?
under reversed f xs
来自lens
库的成语将以相反的顺序将f应用于xs:
under reversed (take 5) [1..100] => [96,97,98,99,100]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2915 次 |
最近记录: |