在haskell中创建添加列表函数而不使用嵌入方法
使用我的zip函数(见下文),编写一个函数addpairs,它接受两个列表[x0;x1;…;xn]和[y0;y1;…;ym],并返回列表[x0+y0;x1+y1;…;xp+yp],其中p=min(n;m)。其中,这是控制台的输出在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,
*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