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。配对