List 调用helper函数反转列表,然后在Haskell中压缩列表

List 调用helper函数反转列表,然后在Haskell中压缩列表,list,haskell,zip,helper,List,Haskell,Zip,Helper,我是Haskell的新手,几个小时来我一直在尝试让这两个函数一起工作,使用递归生成一个压缩的反向列表,而不使用内置函数 以下是用于反转列表的帮助函数: reverseList :: [x] -> [x] reverseList [] = [] reverseList xs = last xs : reverseList (init xs) 这是拉链的功能 ZipRevLists2 :: [x] -> [y] -> [(x, y)] ZipRevLists2 _ [] =

我是Haskell的新手,几个小时来我一直在尝试让这两个函数一起工作,使用递归生成一个压缩的反向列表,而不使用内置函数

以下是用于反转列表的帮助函数:

reverseList :: [x] -> [x]
reverseList  [] = []
reverseList  xs = last xs : reverseList (init xs)
这是拉链的功能

ZipRevLists2 :: [x] -> [y] -> [(x, y)]
ZipRevLists2 _ [] = []
ZipRevLists2 [] _ = []
ZipRevLists2 (x:xs) = reverseList xs
ZipRevLists2 (y:ys) = reverseList ys
ZipRevLists2 (x:xs) (y:ys) = (x,y) : ZipRev2Lists xs ys

我试图从learnyouahaskell.com学习,但唯一的例子是“ghci>”而不是真正的函数形式。

谢谢,我终于找到了

Zip函数

zip' :: [x] -> [y] -> [(x,y)]
zip' _ [] = []
zip' [] _ = []
zip' (x:xs) (y:ys) = (x,y):zip' xs ys
主要功能是什么

zipRevLists2 :: [Int] -> [Char] -> [(Int,Char)]
zipRevLists2 _ [] = []
zipRevLists2 [] _ = []
zipRevLists2 (x:xs) (y:ys) = zip' (reverseList (x:xs))  (reverseList (y:ys))

您可以先拉后倒,也可以分别拉后倒(两者)。值不能以大写开头,并且所有大小写必须具有相同数量的参数。从递归调用到
last
init
,您将获得二次性能。我正在尝试后一种方法,将两者分别反转,然后压缩。。当你说大写的时候,你的意思是我会用“ZipRevLists2”来代替“ZipRevLists2”吗?是的,我的意思是-大写代表类型。试着分别写出
zip
,然后将助手
zip
reverse
组合到您想要的整个函数中。@moonGoose这些建议是正确的,但用词是错误的。变量不能以小写字母开头。函数是变量,所以这适用于这里。但是值可以是大写的(值构造函数),类型可以是小写的(类型变量)。重要的区别在于变量和构造函数之间,而不是值和类型之间。由于
zip'
(大概还有
reverseList
)已经在为您进行模式匹配,您还可以简化一点:
zipRevLists2::。。。;zipRevLists2 xs ys=zip'(反向列表xs)(反向列表ys)