Haskell - zip 2列表

时间:2015-05-06 08:56:39

标签: haskell

我想编写一个将两个列表压缩在一起的函数。我有以下代码:

zip' :: [a]->[b]->[(a,b)]
zip' _ [] = []
zip' [] _ = []
zip' (x:xs)(y:ys)=(x,y) zip'(xs ys)

问题在于,当我编译代码时,我会遇到很多错误

  

无法将预期类型[b] - > t0与实际类型a匹配

     

函数xs应用于一个参数

任何想法我做错了什么? 对不起,如果这听起来像是一个愚蠢的问题。

2 个答案:

答案 0 :(得分:11)

您需要将(x,y)附加到返回值:

zip' (x:xs) (y:ys) = (x,y):zip' xs ys

否则,它在语法上没有意义,因为你不是cons(:)你匹配到返回值的x,y。

Fiddle

答案 1 :(得分:7)

  

任何想法我做错了什么?

代码

(x,y) zip'(xs ys)

表示:接受函数 (x,y)并将其应用于两个参数,第一个是zip',第二个是应用函数的结果 xsys

由于(x,y)不是函数,因此会触发类型错误。此外,xs不是函数,因此应用程序会导致另一个类型错误。