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