首页 > 解决方案 > 如何将函数应用于列表的两个元素 - Haskell

问题描述

如何将函数应用于列表的两个元素。例如:

给定列表[red,star,blue,oval,orange,hexagon],我想将函数应用于每一对functionName(red,star) functionName(blue,oval) functionName(orange,hexagon)

我猜我将不得不使用递归。

标签: listfunctionhaskell

解决方案


是的,方法是定义一个递归函数 - 如果输入列表的项目数不均匀,您需要考虑(以及我们不知道的)应该发生什么?当然,您想如何收集该函数的结果?

假设您只是忽略不均匀列表中的最后一个元素,并且您希望将结果收集到另一个列表中:

applyPairwise :: (a -> a -> b) -> [a] -> [b]
applyPairwise f (a1 : a2 : rest) = f a1 a2 : applyPairwise f rest
applyPairwise _ _ = []

例子:

> applyPairwise (+) [1..5]
[3,7]

推荐阅读