簡體   English   中英

笛卡爾在Erlang中的列表列表的產品

[英]Cartesian Product of a list of lists in Erlang

我有一個列表列表(在erlang中,字符串是列表),如下所示:

[ “ABC”, “DEF”]

我希望在函數返回的列表中獲得以下組合:

[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]

列表理解是否可行? 我事先不知道列表的維度

如果您不知道輸入的維度,那么您需要使用遞歸,因為@legoscia說:

cartesian([H])   -> [[A] || A <- H];
cartesian([H|T]) -> [[A|B] || A <- H, B <- cartesian(T)].

1-dim輸入“abc”變為[“a”,“b”,“c”],其他一切都是遞歸。

> cartesian:cartesian(["abc", "def", "ghi"]).
 ["adg","adh","adi","aeg","aeh","aei","afg","afh","afi",
 "bdg","bdh","bdi","beg","beh","bei","bfg","bfh","bfi","cdg",
 "cdh","cdi","ceg","ceh","cei","cfg","cfh","cfi"]

編輯:或者更簡單,但是:讓0-dim參數返回包含空集的集合。 我認為這也是數學家所做的。

cartesian([H|T]) -> [[A|B] || A <- H, B <- cartesian(T)];
cartesian([]) -> [[]].

如果你有兩個列表,那么你可以使用這樣的列表理解:

1> [[X,Y] || X <- "abc", Y <- "def"].
["ad","ae","af","bd","be","bf","cd","ce","cf"]

如果您有任意數量的列表,則可以使用遞歸函數中的列表推導來實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM