将元素映射到 Haskell 中的函数列表
Mapping an element to a list of functions in Haskell
Haskell 中的 Prelude 函数 map
将函数应用于输入列表:
map :: (a -> b) -> [a] -> [b]
如果我们想将一个元素应用于函数列表,我们可以通过递归来实现:
functionMap :: a -> [a -> b] -> [b]
functionMap element functions = case functions of
[] -> []
x:xs -> x element : functionMap element xs
如果可能的话,我们如何用高阶函数来简化上述递归,例如foldl
、foldr
或map
?
您可以 map
覆盖 functions
并将每个应用到 element
:
functionMap :: a -> [a -> b] -> [b]
functionMap element functions = map (\f -> f element) functions
这可以使用 $
运算符缩短为:
functionMap :: a -> [a -> b] -> [b]
functionMap element functions = map ($ element) functions
或者只是:
functionMap :: a -> [a -> b] -> [b]
functionMap element = map ($ element)
(也:functionMap = map . flip id
)
Haskell 中的 Prelude 函数 map
将函数应用于输入列表:
map :: (a -> b) -> [a] -> [b]
如果我们想将一个元素应用于函数列表,我们可以通过递归来实现:
functionMap :: a -> [a -> b] -> [b]
functionMap element functions = case functions of
[] -> []
x:xs -> x element : functionMap element xs
如果可能的话,我们如何用高阶函数来简化上述递归,例如foldl
、foldr
或map
?
您可以 map
覆盖 functions
并将每个应用到 element
:
functionMap :: a -> [a -> b] -> [b]
functionMap element functions = map (\f -> f element) functions
这可以使用 $
运算符缩短为:
functionMap :: a -> [a -> b] -> [b]
functionMap element functions = map ($ element) functions
或者只是:
functionMap :: a -> [a -> b] -> [b]
functionMap element = map ($ element)
(也:functionMap = map . flip id
)