gpt4 book ai didi

list - Haskell - 如何以优雅的方式以相反的顺序迭代列表元素?

转载 作者:行者123 更新时间:2023-12-04 16:53:05 24 4
gpt4 key购买 nike

我正在尝试编写一个函数,该函数给出一个数字列表,返回一个列表,其中从最后一个元素开始,每个第二个数字的值都加倍。因此,如果列表元素是 1..n,则第 n 将保持原样,第 (n-1)-th 的值将翻倍,第 (n-2)-将保持原样原样等

所以这是我解决它的方法:

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

它有效:
MyFunc [1,1,1,1] = [2,1,2,1]
MyFunc [1,1,1] = [1,2,1]

但是,我不禁想到必须有一个比反转列表、处理它然后再次反转它更简单的解决方案。我可以简单地向后迭代列表吗?如果是,如何?

最佳答案

under reversed f xs来自 lens 的成语库将以相反的顺序将 f 应用于 xs:

under reversed (take 5) [1..100] => [96,97,98,99,100]

关于list - Haskell - 如何以优雅的方式以相反的顺序迭代列表元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20459241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com