是否有内置函数将函数列表一个接一个地应用于某个值?我目前正在使用它,但它对我来说似乎很不优雅。
-- 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)
答案 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