gpt4 book ai didi

haskell - 基于发现值的映射

转载 作者:行者123 更新时间:2023-12-02 16:33:41 25 4
gpt4 key购买 nike

我希望能够根据找到的元素映射但跳过一些元素。问题的本质就在这里。

a = [1,2,3,4,5]

i = 0
while i < len(a):
if a[i] % 2 == 0:
a[i] *= 2
else:
i += 1
i += 1

我可以通过传递一个索引变量和一个累加器在 Haskell 中用显式递归来表达这一点。

f :: Int -> [Int] -> [Int] -> [Int]
f index list acc = if index < length list then
if even (list !! index) then f (index + 1) list (acc ++ [(list !! index) * 2]) else f (index + 2) list (acc ++ [list !! index, list !! (index + 1)])
else acc

f 0 [1,2,3,4,5] []

但这感觉真的很难看,有没有更好的方法呢?

最佳答案

如何使用 mapAccumL 并使用 bool 累加器来表示前一个数字是否为奇数?

f = snd . mapAccumL go False
where
go False n | even n = (False, n * 2)
go True n | even n = (False, n)
go _ n = (True, n)

关于haskell - 基于发现值的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63125309/

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