[英]Appending lists into a list of lists in Haskell?
我能在相关文档中找到的只是 ++ 和 concat。
起初我认为执行以下操作会给我想要的东西:
[1, 3, 4] ++ [4, 5, 6]
但如您所知,它只给出 [1, 2, 3, 4, 5, 6]。
我需要做什么才能接受 [1, 2, 3] 和 [4, 5, 6] 并退出 [[1, 2, 3], [4, 5, 6]]?
如评论中所述,获取两个列表并将它们组合成一个新列表的函数可以定义为:
combine :: [a] -> [a] -> [[a]]
combine xs ys = [xs,ys]
不能多次应用此函数来创建任意数量列表的列表。 这样的函数将接受一个列表和一个列表列表,并将单个列表添加到列表列表中,因此它的类型为:
push :: [a] -> [[a]] -> [[a]]
这只是(:)
,不过:
push = (:)
正如评论中提到的,值[x,y]
也可以写成x : y : []
。 1由于这两种情况都可以用(:)
完成,我猜你真正想要使用的是(:)
,有时会用到[]
有时会用到非空列表。
1事实上, [x,y]
只是x:y:[]
的语法糖。
想想 (++) 运算符的作用:它连接列表,而不是构造它们。 这就是它将文本字符串连接成新字符串(而不是字符串列表)的方式,因为字符串是字符列表。 从您使用 (:) 的列表中构造一个新列表,如下所示:
[1,2,3]:[4,5,6]:[]
您将每个列表添加为新列表的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.