Haskell:一个通过计算列表中的每个值来更新状态的函数



我需要一个函数,它可以根据值列表多次更新状态:对于列表中的每个值,它可能会更新状态或保持不变。所以我想我需要一个类似的函数

[a] -> b -> (a->b->b) -> b

其中[a]是一个值列表,其中每个值的状态b都可以更新(取决于a的值)。然后得到的b是应用了所有必要更新的新状态。

然而,我在Hoogle上找不到任何能做到这一点的函数,所以我想我必须自己做一个,但我不知道我该怎么做。是否存在任何我可以用来完成此类功能的功能?

如果有人能帮我解决这个问题,我将不胜感激!

谨致问候,Skyfe。

编辑:一个(简化的)例子,我可以有什么&需求:

[a] = [1, 5, 3, 6]
b   = State{x, y, z}
f :: (a->b->b)
f a b = if someAlgorithm a then b{x=someFunc x, y=y+1} else b

=>然后,我需要的函数应该对所有的a执行f,每次执行时,它都应该返回新的(更新或未更改的)b作为对f的新调用的参数,以及列表[a]中的下一个元素,以此类推,直到它对所有元素都执行了这一操作,并在应用了所有更新的情况下生成最终的b。

在列表中应用filter someAlgorithm后,您想要的是foldr f b a。如果你不知道这些函数,可以在hoogle上查找。

最新更新