Mal*_*lte 2 erlang list-comprehension list cartesian-product
我有一个列表列表(在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)].
Run Code Online (Sandbox Code Playgroud)
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"]
Run Code Online (Sandbox Code Playgroud)
编辑:或者更简单,但是:让0-dim参数返回包含空集的集合.我认为这也是数学家所做的.
cartesian([H|T]) -> [[A|B] || A <- H, B <- cartesian(T)];
cartesian([]) -> [[]].
Run Code Online (Sandbox Code Playgroud)