List 如何将函数应用于列表的两个元素-Haskell
如何将函数应用于列表的两个元素。例如:List 如何将函数应用于列表的两个元素-Haskell,list,function,haskell,List,Function,Haskell,如何将函数应用于列表的两个元素。例如: pairing [] == [] pairing [1] == [] pairing [1,2,3,4] == [(1,2),(3,4)] pairing [1,2,3,4,5] == [(1,2),(3,4)] f x = x^2 map f [0,1,2] == [0,1,4] 给定列表[红色,星形,蓝色,椭圆形,橙色,六边形]我想将函数应用于每对函数名(红色,星形)函数名(蓝色,椭圆形)函数名(橙色,六边形) 我猜我必须使用递归。是的,接下来要
pairing [] == []
pairing [1] == []
pairing [1,2,3,4] == [(1,2),(3,4)]
pairing [1,2,3,4,5] == [(1,2),(3,4)]
f x = x^2
map f [0,1,2] == [0,1,4]
给定列表[红色,星形,蓝色,椭圆形,橙色,六边形]
我想将函数应用于每对函数名(红色,星形)
函数名(蓝色,椭圆形)
函数名(橙色,六边形)
我猜我必须使用递归。是的,接下来要定义一个递归函数-您需要考虑的(我们不知道的)是,如果输入列表中的项计数不均匀,会发生什么? 当然,您希望如何收集该函数的结果 假设忽略不均匀列表中的最后一个单元素,并希望将结果收集到另一个列表中:
applyPairwise::(a->a->b)->[a]->[b]
applyPairwise f(a1:a2:rest)=f a1 a2:applyPairwise f rest
applyPairwise[uuu0][]
例如:
>applyPairwise(+)[1..5]
[3,7]
是的,接下来要定义一个递归函数——您需要考虑的是(我们不知道的是),如果输入列表中的项目计数不均匀,会发生什么情况?
当然,您希望如何收集该函数的结果
假设忽略不均匀列表中的最后一个单元素,并希望将结果收集到另一个列表中:
applyPairwise::(a->a->b)->[a]->[b]
applyPairwise f(a1:a2:rest)=f a1 a2:applyPairwise f rest
applyPairwise[uuu0][]
例如:
>applyPairwise(+)[1..5]
[3,7]
补充Carsten的答案,有时在函数式编程(或一般编程)中,您可能希望将要执行的任务划分为多个子任务。因此,这里有两项任务:
配对
,该函数执行以下操作(并且假设您要忽略空列表或单例列表):
配对::[a]->[(a,a)]
配对[]=[]
配对[x]=[]
配对(x:y:xs)=(x,y):配对xs
例如:
pairing [] == []
pairing [1] == []
pairing [1,2,3,4] == [(1,2),(3,4)]
pairing [1,2,3,4,5] == [(1,2),(3,4)]
f x = x^2
map f [0,1,2] == [0,1,4]
对于任务2,Haskell中有一个操作将函数应用于名为map
的元素列表(这些以函数为参数的函数称为高阶函数):
例如:
pairing [] == []
pairing [1] == []
pairing [1,2,3,4] == [(1,2),(3,4)]
pairing [1,2,3,4,5] == [(1,2),(3,4)]
f x = x^2
map f [0,1,2] == [0,1,4]
因此,我们现在可以实现如下函数applyPairwise
:
applyPairwise :: ((a,a) -> b) -> [a] -> [b]
applyPairwise f xs = map f (pairing xs)
或者更好地使用构图:
applyPairwise f=map f。配对
补充Carsten的答案,有时在函数式编程(或一般编程)中,您可能希望将要执行的任务划分为多个子任务。因此,这里有两项任务:
配对
,该函数执行以下操作(并且假设您要忽略空列表或单例列表):
配对::[a]->[(a,a)]
配对[]=[]
配对[x]=[]
配对(x:y:xs)=(x,y):配对xs
例如:
pairing [] == []
pairing [1] == []
pairing [1,2,3,4] == [(1,2),(3,4)]
pairing [1,2,3,4,5] == [(1,2),(3,4)]
f x = x^2
map f [0,1,2] == [0,1,4]
对于任务2,Haskell中有一个操作将函数应用于名为map
的元素列表(这些以函数为参数的函数称为高阶函数):
例如:
pairing [] == []
pairing [1] == []
pairing [1,2,3,4] == [(1,2),(3,4)]
pairing [1,2,3,4,5] == [(1,2),(3,4)]
f x = x^2
map f [0,1,2] == [0,1,4]
因此,我们现在可以实现如下函数applyPairwise
:
applyPairwise :: ((a,a) -> b) -> [a] -> [b]
applyPairwise f xs = map f (pairing xs)
或者更好地使用构图:
applyPairwise f=map f。配对