【发布时间】:2020-03-09 06:23:25
【问题描述】:
我需要一个 Haskell 函数,它接受一个函数列表和一个元素列表,并将函数应用于如下元素:第一个函数应用于第一个元素,第二个函数应用于第二个元素,等等。如果有列表停止,我希望功能停止。 我想出的定义是这样的:
apply :: [(a -> b)] -> [a] -> [b]
我希望它像这样工作:
apply [(+1), (*3), (^2)] [1,2,3] == [2,6,9]
apply [even, odd] [1..] == [False, False]
到目前为止我尝试过的事情:
apply :: [(a -> b)] -> [a] -> [b]
apply [] _ = []
apply (f:fs) x = (f x) : (apply fs x)
【问题讨论】:
-
zipWith绝对是一个有用的功能。正如上述评论者所说,zipWith ($)和zipWith id都会做你想做的事。它们是相同的,因为($)实际上与id相同,只是仅限于功能(起初这有点令人震惊,但这是真的,我鼓励你找出原因) - 因为这个原因我更喜欢使用($),因为更明显的是您在谈论函数应用程序。
标签: haskell functional-programming