如何在Haskell中运行一系列操作(函数)?

时间:2010-12-02 21:44:45

标签: haskell functional-programming

假设我有一个值列表,我希望在获得最终结果之前应用一系列操作:

[0, 1, 2]

firstOperation xs = map (+1) xs
secondOperation xs = filter even xs
thirdOperation xs = sum xs

虽然我确信还有其他更好的方法可以解决这个问题,但我目前唯一知道的是定义一个函数,该函数将所有这些函数嵌套在另一个函数中:

runAllOperations xs = thirdOperation (secondOperation (firstOperation xs))

但这既丑陋又引发了一个问题,如果我有10次操作,就会把这段代码变成维护噩梦。

在这里实施某种类似的正确方法是什么?请记住,我上面给出的示例仅仅是对我当前项目所面临的内容的过度简化。

2 个答案:

答案 0 :(得分:6)

.$()更具可读性

runAllOperations xs = thirdOperation $ secondOperation $ firstOperation xs

runAllOperations = thirdOperation . secondOperation . firstOperation

答案 1 :(得分:4)

如果您可以列出所有操作,则可以将合成运算符折叠到该列表上:

foldr (.) id fns

然后您可以将结果应用于初始值。

虽然您可能需要单独应用最终缩减步骤。