使用重复Erlang生成变体

使用重复Erlang生成变体,erlang,Erlang,我找到了一种生成列表组合的方法,但这里顺序并不重要,但我需要在顺序重要的地方生成变体 组合: comb_rep(0,_) -> [[]]; comb_rep(_,[]) -> []; comb_rep(N,[H|T]=S) -> [[H|L] || L <- comb_rep(N-1,S)]++comb_rep(N,T). 期望输出: comb_rep(2,[1,2,3]). [[1,1],[1,2],[1,3],[2,2],[2,3],[3,1

我找到了一种生成列表组合的方法,但这里顺序并不重要,但我需要在顺序重要的地方生成变体

组合:

comb_rep(0,_) ->
    [[]];
comb_rep(_,[]) ->
    [];
comb_rep(N,[H|T]=S) ->
    [[H|L] || L <- comb_rep(N-1,S)]++comb_rep(N,T).
期望输出:

comb_rep(2,[1,2,3]).
[[1,1],[1,2],[1,3],[2,2],[2,3],[3,1],[3,2],[3,3]]

根据评论中的解释,这将是我的初步方法:

cr(0, _) ->
    [];
cr(1, L) ->
    [ [H] || H <- L ];
cr(N, L) ->
    [ [H | T] || H <- L, T <- cr(N - 1, L -- [H]) ].
cr(0)——>
[];
cr(1,L)->
[H]| | H

[H | T]| H根据评论中的解释,这将是我的初步方法:

cr(0, _) ->
    [];
cr(1, L) ->
    [ [H] || H <- L ];
cr(N, L) ->
    [ [H | T] || H <- L, T <- cr(N - 1, L -- [H]) ].
cr(0)——>
[];
cr(1,L)->
[H]| | H

[H | T]| H这个输出和期望输出之间的差异不是顺序,只是在原始输出中,省略了第一个大于第二个的组合。如果comb|rep的第一个参数是3,那么知道会发生什么也很好(例如,comb_rep(3,[1,2,3])的预期结果是什么。对于comb_rep(3,[1,2,3]),结果将是给定列表的排列。因此:[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]基本上,对于comb rep(K,list)。我想获得元素的所有K长度排列,即列表中的元素。如果我使用了错误的单词,很抱歉,但如果是这样,则comb_Rep(2,[1,2,3])的预期结果不应包括[1,1]或[2,2]或[3,3]。对吗?在我看来,预期结果应该是[1,2]、[1,3]、[2,1]、[2,3]、[3,2]]。此输出与所需输出之间的差异不是顺序,只是在原始输出中,省略了第一个大于第二个的组合。如果comb_rep的第一个参数为3(即comb_rep(3,[1,2,3]),则最好知道会发生什么情况对于comb_rep(3,[1,2,3]),结果将是给定列表的排列。因此:[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]基本上,对于comb_rep(K,list)。我想获得元素的所有K长度排列,即列表中的元素。如果我使用了错误的单词,很抱歉,但如果是这样,则comb_Rep(2,[1,2,3])的预期结果不应包括[1,1]或[2,2]或[3,3]。对吗?在我看来,预期结果应该是[1,2]、[1,3]、[2,1]、[2,3]、[3,2]]。