小编The*_*o H的帖子

撤销前缀和

在 Haskell 中计算前缀和的简单方法是

scanl1 (+) [1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

产生输出

[1,3,6,10,15,21]
Run Code Online (Sandbox Code Playgroud)

我需要写出逆函数,这就是我想出的:

undo_prefix_sum :: (Num a) => [a] -> [a]
undo_prefix_sum s = init $ snd $ 
    foldr (\cur (tot, l) -> (cur, (tot-cur):l)) 
          (last s, []) 
          (0:s)
Run Code Online (Sandbox Code Playgroud)

这似乎是正确的(但我可能错过了一些东西)。有没有更简单或更有效的方法来做到这一点,可能使用扫描?

haskell prefix-sum

1
推荐指数
1
解决办法
190
查看次数

标签 统计

haskell ×1

prefix-sum ×1