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

在haskell中创建添加列表函数而不使用嵌入方法,haskell,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,

使用我的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 _ [] = []
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

感谢您的帮助。

如果函数给出的两个列表是
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 :: (a -> b) -> [a] -> [b]
您的函数应该如下所示:

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

其中,
f
应该是一个函数,它接受要添加的
(a,a)
,并返回结果
a
。这将有助于您填写其余部分。

如果函数给出的两个列表是
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 :: (a -> b) -> [a] -> [b]
您的函数应该如下所示:

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

其中,
f
应该是一个函数,它接受要添加的
(a,a)
,并返回结果
a
。这将有助于您填写其余内容。

您几乎可以在zip函数中记录解决方案。 但是,不是将两个关联值a和b相加,而是从它们构造一个元组


为什么,既然你想添加它们?

你的zip函数中几乎写下了解决方案。 但是,不是将两个关联值a和b相加,而是从它们构造一个元组


为什么,既然你想添加它们?

所以我对haskell真的很陌生,我仍在努力弄清楚一切是如何运作的。因此,将函数放在一起的实际语法现在对我来说有点难。基本上,我不明白这意味着什么。我已经扩展了我的答案,希望能帮助说明结果
addpairs
定义的结构应该是什么。我仍然有问题,这就是我所说的:addpairs xs ys=f(Recursion.zip xs ys),其中f(x:xs)(y:ys)=f x y:addpairs f xsys@thehobbit21:
f
不需要处理整个列表;它只需要加上两个数字,以元组的形式给出。所以我对haskell真的很陌生,我仍在努力弄清楚每件事是如何运作的。因此,将函数放在一起的实际语法现在对我来说有点难。基本上,我不明白这意味着什么。我已经扩展了我的答案,希望能帮助说明结果
addpairs
定义的结构应该是什么。我仍然有问题,这就是我所说的:addpairs xs ys=f(Recursion.zip xs ys),其中f(x:xs)(y:ys)=f x y:addpairs f xsys@thehobbit21:
f
不需要处理整个列表;它只需要加上两个数字,以元组的形式给出。我不明白你的问题。真的吗?再想想。您有两个列表
as
bs
,希望得到一个添加相应元素的列表,对吗?所以,问问你自己,如果你把
a+b:Recursion.zip写成bs
而不是
(a,b):Recursion.zip写成bs
,结果会是什么?我不明白你的问题。真的吗?再想想。您有两个列表
as
bs
,希望得到一个添加相应元素的列表,对吗?因此,问问你自己,如果你把
a+b:Recursion.zip写成bs
而不是
(a,b):Recursion.zip写成bs