2009-12-09 23 views
0

編輯:我的問題最初是「是否有一個標準的名稱爲一個函數列出清單,但只有一個深度?」,但查克的答案是措辭更接近我真正想問的,所以我改名它。不過,這三個答案對我來說都很有用。謝謝。是否有一個函數的通用名稱,該函數接受列表並返回包含這些列表內容的單個列表?

'flatten'似乎是一個被廣泛接受的名字,它是一個函數,它接受一棵樹並建立一個原子列表,然而它們嵌套的深度很大,但是一個函數在一個級別之後就會停止?所以((1 2)((3 4)(5 6))(7 8))「一些」到(1 2(3 4)(5 6)7 8)。 「某些東西」在多種語言/庫中有一個共同的名字嗎?

對這個問題的答案:

Flattening a shallow list in Python

表明,「鏈」可能是一個很好的猜測,但它足以常見的是「標準」?

回答

3

這需要一個列表的列表,並返回一個列表功能包含這些列表的內容在許多功能語言(如OCaml,F#,Haskell,Clojure)中稱爲「concat」。

2

我不確定這是否有標準名稱。我能說出3個不同的名字

3層不同的實現
  • 的Python:鏈
  • F#:CONCAT
  • LINQ:的SelectMany
5

對於移除內部組列表的列表的括號的,concat很受歡迎。通常稱爲join,用於展平單元MM的更一般的功能是。在抽象代數中,這個函數被標準地稱爲µ

0

在Common Lisp中,您可以將APPEND或CONCATENATE應用於正確的類型參數。 APPEND的結果與參數列表共享底層結構; CONCATENATE總是複製,也可以應用於非列表序列。

+0

但是,不要將這兩個列表作爲單獨的參數加入,而不包含在單個列表中?所以我可以做(append(1 2)((3 4)(5 6))(7 8))並返回(1 2(3 4)(5 6)7 8),但(append((1 2 )((3 4)(5 6))(7 8)))將返回((1 2)((3 4)(5 6))(7 8)),對嗎? – jtolle 2009-12-09 16:49:13

+0

是的,但您可以在APPLY中使用_spreadable參數list_,或者使用REDUCE逐步完成。 – Svante 2009-12-09 16:52:45

+0

對。我所要求的是一個通用名稱可以用於一個函數(應用#'追加列表列表)或(減少#'追加列表列表)。 'concat','join'或'chain'似乎都是合理的。 – jtolle 2009-12-09 17:45:23

相關問題