将每个函数应用于列表的每个元素Haskell

将每个函数应用于列表的每个元素Haskell,haskell,Haskell,我有这样一个函数列表: [1,+2,*4,^2] 我想将每个函数应用于另一个列表的每个元素。例如,我有一个类似于[1..5]的列表,我希望得到如下结果:[2,4,12,16] 这是我已经尝试过的 applyEach :: [(a -> b)] -> [a] -> [b] applyEach _ [] = [] applyEach (x:xs) (y:ys) = x y : applyEach xs ys 我不知道是什么问题,我们有一个在线界面,我们必须放置代码,它测试我们的提

我有这样一个函数列表:

[1,+2,*4,^2]

我想将每个函数应用于另一个列表的每个元素。例如,我有一个类似于[1..5]的列表,我希望得到如下结果:[2,4,12,16]

这是我已经尝试过的

applyEach :: [(a -> b)] -> [a] -> [b]
applyEach _ [] = []
applyEach (x:xs) (y:ys) = x y : applyEach xs ys

我不知道是什么问题,我们有一个在线界面,我们必须放置代码,它测试我们的提交,只说我的代码没有通过

当列表长度相同或第二个列表比第一个列表短时,您的函数工作正常:

> applyEach [(+1), (+2), (*4), (^2)] [1..4]
[2,4,12,16]
> applyEach [(+1), (+2), (*4), (^2)] [1..3]
[2,4,12]
但您没有处理第二个列表较长的情况,如您的示例所示:

> applyEach [(+1), (+2), (*4), (^2)] [1..5]
[2,4,12,16*** Exception: H.hs:(2,1)-(3,47): Non-exhaustive patterns in function applyEach

您需要在函数中再添加一个等式来处理这种情况。

您也可以使用内置的zipWith函数和$operator来完成此操作:

applyEach fs xs = zipWith ($) fs xs

作业按此顺序,执行以下操作:1。在当然提供的课程材料中寻找答案或提示,2。与你的同学讨论,3。问问你的指导老师,在标准库中已经有一个函数可以做到这一点。虽然我想这是一个比你现在习惯的更高的抽象层次。哦,好吧,我真的忘了添加这个案例applyEach[].[],谢谢你,你救了我的命=