在haskell中创建添加列表函数而不使用嵌入式方法

时间:2012-01-24 20:07:21

标签: haskell

使用我的zip函数(见下文),编写一个函数addpairs,它有两个列表[x0; X1; ......; xn]和[y0; Y1; ......; ym]并返回列表[x0 + y0; x1 + y1; ......; xp + yp],其中p = min(n; m)。这是控制台的输出。

*Recursion> :t addpairs
addpairs :: (Num a) => [a] -> [a] -> [a]
*Recursion> addpairs [1,2,3,4] [40,50,60,90]
[41,52,63,94]

我的拉链功能:

zip [] _ = []
zip _ [] = []
zip (a:aa) (b:bb) = (a,b) : Recursion.zip aa bb

任何帮助都会很棒。

我实际上解决了这个问题 这是我提出的解决方案:

addpairs xs ys = map f (Recursion.zip xs ys)
  where f (x,y) = x + y

感谢所有帮助。

2 个答案:

答案 0 :(得分:3)

你几乎已经在你的zip功能中写下了解决方案。 但是,不是添加两个相关的值a和b,而是从它们构造一个元组。

为什么,假设您要添加它们?

答案 1 :(得分:2)

如果xsys是您的函数的两个列表,那么zip xs ys将是要添加的数字元组的列表:

GHCi> zip [1,2,3,4] [40,50,60,90]
[(1,40),(2,50),(3,60),(4,90)]
对于某些数字类型zip xs ys

[(a,a)]的类型为a。接下来,查看map的类型:

map :: (a -> b) -> [a] -> [b]

您的功能应如下所示:

addpairs xs ys = map f (zip xs ys)
  where f ...

其中f应该是一个函数,需要添加(a, a)并返回结果a。这应该可以帮助你填补其余部分。