gpt4 book ai didi

haskell - Haskell 中从右侧开始将列表中的所有其他元素加倍

转载 作者:行者123 更新时间:2023-12-02 06:59:47 25 4
gpt4 key购买 nike

我有一个列表,我想将该列表中从右侧开始的所有其他元素加倍。

还有另一个相关问题可以解决此问题,但它从左侧加倍,而不是从右侧加倍:Haskell: Double every 2nd element in list

例如,在我的场景中,[1,2,3,4] 将变为 [2,2,6,4],在该问题中,[1,2,3,4] 将变为 [1, 4,3,8]。

我将如何实现这个?

最佳答案

我认为最上面的答案误解了这个问题。标题清楚地表明OP想要将列表右侧的第二个、第四个等元素加倍。 Ørjan Johansen 的答案是正确的,但速度很慢。这是我更有效的解决方案:

doubleFromRight :: [Integer] -> [Integer]
doubleFromRight xs = fst $ foldr (\x (acc, bool) ->
((if bool then 2 * x else x) : acc,
not bool)) ([], False) xs

它从右侧折叠列表。初始值是一个包含空列表和 bool 值的元组。 bool 值一开始为 false,并且每次都会翻转。仅当 bool 值为 true 时,该值才会乘以 2。

关于haskell - Haskell 中从右侧开始将列表中的所有其他元素加倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19867491/

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