Там в несколько иной подход, он также поддерживает задав необходимую длину для списков результата:
defmodule Permutations do
def shuffle(list), do: shuffle(list, length(list))
def shuffle([], _), do: [[]]
def shuffle(_, 0), do: [[]]
def shuffle(list, i) do
for x <- list, y <- shuffle(list, i-1), do: [x|y]
end
end
iex(24)> Permutations.shuffle ["a", "b", "c"]
[["a", "a", "a"], ["a", "a", "b"], ["a", "a", "c"], ["a", "b", "a"],
["a", "b", "b"], ["a", "b", "c"], ["a", "c", "a"], ["a", "c", "b"],
["a", "c", "c"], ["b", "a", "a"], ["b", "a", "b"], ["b", "a", "c"],
["b", "b", "a"], ["b", "b", "b"], ["b", "b", "c"], ["b", "c", "a"],
["b", "c", "b"], ["b", "c", "c"], ["c", "a", "a"], ["c", "a", "b"],
["c", "a", "c"], ["c", "b", "a"], ["c", "b", "b"], ["c", "b", "c"],
["c", "c", "a"], ["c", "c", "b"], ["c", "c", "c"]]
iex(25)> Permutations.shuffle ["a", "b", "c"], 2
[["a", "a"], ["a", "b"], ["a", "c"], ["b", "a"], ["b", "b"], ["b", "c"],
["c", "a"], ["c", "b"], ["c", "c"]]
Source
Это не очень идиоматических код Elixir. –
@OnorioCatenacci Это не очень информативный комментарий. : D Я еще не эксперт по эликсиру. Я был бы рад увидеть более идиоматическое решение, если у вас будет время опубликовать его - в основном я положил это здесь, потому что думал, что это будет общий вопрос, но я не нашел ответа на SO. В следующий раз, когда я буду искать, я это сделаю. Я считаю это «записью для себя», которую могут использовать и другие. –
Комментарий на самом деле не был направлен на вас. Это было больше направлено на других, которые могли бы видеть ваш код и, не зная ничего лучше, предполагают, что это правильный способ написать код Эликсира. –