Haskell-zip 2列表

Haskell-zip 2列表,haskell,Haskell,我想写一个函数,将两个列表压缩在一起。我有以下代码: zip' :: [a]->[b]->[(a,b)] zip' _ [] = [] zip' [] _ = [] zip' (x:xs)(y:ys)=(x,y) zip'(xs ys) 问题是,当我编译代码时,会出现很多错误 无法将预期类型[b]->t0与实际类型a匹配 函数xs应用于一个参数 知道我做错了什么吗? 如果这听起来像个愚蠢的问题,很抱歉。您需要在返回值后面附加(x,y): zip' (x:xs) (y:ys) = (

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

zip' :: [a]->[b]->[(a,b)]
zip' _ [] = []
zip' [] _ = []
zip' (x:xs)(y:ys)=(x,y) zip'(xs ys)
问题是,当我编译代码时,会出现很多错误

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

函数xs应用于一个参数

知道我做错了什么吗? 如果这听起来像个愚蠢的问题,很抱歉。

您需要在返回值后面附加
(x,y)

zip' (x:xs) (y:ys) = (x,y):zip' xs ys
否则,它在语法上没有任何意义,因为您没有对与返回值匹配的x,y进行排序

知道我做错了什么吗

代码

(x,y) zip'(xs ys)
方法:将函数
(x,y)
应用于两个参数,第一个是
zip'
,第二个是将函数
xs
应用于
ys
的结果

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