【发布时间】:2020-06-01 01:32:31
【问题描述】:
我是 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>”而不是真正的函数形式。
【问题讨论】:
-
您可以先压缩然后反转,也可以分别反转(两者)然后压缩。值不能以大写开头,并且所有大小写必须具有相同数量的参数。递归调用
lastinit,您将获得二次性能。 -
我正在尝试做后者,我分别反转然后 zip.. 当你说大写时,你的意思是我会使用“zipRevLists2”而不是“ZipRevLists2”?
-
是的,我的意思是 - 大写用于类型。尝试单独写出
zip,然后将helperszip、reverse组合成你想要的整体函数。 -
@moonGoose 这些是正确的建议,但用词错误。 变量不能以小写开头。函数是变量,所以这里适用。但是值可以是大写的(值构造函数),类型可以是小写的(类型变量)。重要的区别在于变量和构造函数之间,而不是值和类型之间。