我正在编写一些Erlang代码,并希望创建一个递归函数,从列表中提取所有可能的配对。该列表可能没有元素,但最多可以有70个元素。为所有这些情况编写案例是不好的做法,我需要您的帮助。
pair(List) ->
case List of
[] -> [];
[A] -> [{A}];
[A, B] -> [{A, B}, {B, A}];
[A, B, C] -> [{A, B}, {A, C}, {B, A}, {B, C}, {C, A}, {C, B}];
end.
我发现了一个用于创建所有可能组合(不仅仅是所有对)列表的函数,但我不知道如何修改它。
combos(1, L) -> [[X] || X <-L];
combos(K, L) when K == length(L) -> [L];
combos(K, [H|T]) ->
[[H | Subcombos] || Subcombos <- combos(K-1, T)]
++(combos(K, T)).
combos(L) ->
lists:foldl(
fun(K, Acc) -> Acc++(combos(K, L)) end,
[[]], lists:seq(1, length(L))).