使用我的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
感谢所有帮助。
答案 0 :(得分:3)
你几乎已经在你的zip功能中写下了解决方案。 但是,不是添加两个相关的值a和b,而是从它们构造一个元组。
为什么,假设您要添加它们?
答案 1 :(得分:2)
如果xs
和ys
是您的函数的两个列表,那么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
。这应该可以帮助你填补其余部分。