将函数列表一个接一个地应用于值

时间:2014-05-29 17:15:47

标签: haskell

是否有内置函数将函数列表一个接一个地应用于某个值?我目前正在使用它,但它对我来说似乎很不优雅。

-- applyFunctions [(*2), (+3), (*4)] 1 == ((1 * 2) + 3 ) * 4
applyFunctions :: [(a -> a)] -> a -> a
applyFunctions [] x = x
applyFunctions [f] x = f x
applyFunctions (f:fs) x = applyFunctions fs (f x)

3 个答案:

答案 0 :(得分:8)

您可以使用foldl (flip ($))

foldl (flip ($)) 1 [(*2), (*3), (*4)] --yields 24

答案 1 :(得分:4)

您可以使用折叠:

import Data.List
applyFunctions = flip $ foldl' (flip ($))

或者你可以更明确:

applyFunctions l e = foldl' (|>) e l
  where a |> f = f a

答案 2 :(得分:0)

我不知道是否有内置功能,但应用程序是微不足道的。

applyFunctions :: [(a -> a)] -> a -> a
applyFunctions [] v = v
applyFunctions (f:fs) v = applyFunctions fs $ f v