Haskell:扫描数组

oxcyiej7  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(141)

我有一个Foos数组:

myArray :: Array Int Foo

我想使用类似以下的函数从左到右“扫描”它:

getNextStep :: Bar -> Foo -> Bar

我想扫描myArray以生成一个条形数组:

scanl :: (Bar -> Foo -> Bar) -> Bar -> Array Int Foo -> Array Int Bar

是的,这与prelude的scanl非常相似。但是有Arrays的版本吗?我可以用例如Traversable来构建一个吗?谢谢

bnl4lu3b

bnl4lu3b1#

mapAccumL适用于任何可遍历对象,它比扫描更通用一些,但是如果你使用一个阶跃函数,它发出的状态值没有改变,你或多或少会得到一次扫描。

> mapAccumL (\s x -> (s + x, s)) 0 [1,2,3,4]
(10,[0,1,3,6])

如果你想像scanl一样把最后一个元素加回数组,可遍历对象通常没有添加元素的方法,所以我们不能让它对任何可遍历对象起作用。

相关问题