繁体   English   中英

将列表附加到 Haskell 中的列表列表中?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM