Метод встроенных комбинаций эликсира? - PullRequest
0 голосов
/ 28 апреля 2019
defmodule Itertools
    def combinations(_, 0), do: [[]] 
    def combinations([], _), do: [] 
    def combinations([h|t], m) do 
        (for l <- combinations(t, m-1), do: [h|l]) ++ combinations(t, m) 
    end 
end 

Я работаю с вложенным циклом над массивом, который может обрабатываться чем-то вроде Python's itertools.combination, но я не вижу его в стандартной библиотеке. Есть ли где-нибудь встроенный эликсир или есть лучший способ симулировать треугольный цикл над списком в эликсире?

Я получил вышеуказанный код с сайта rosettacode.org.

1 Ответ

0 голосов
/ 29 апреля 2019

Как и в случае с Erlang, Elixir не имеет встроенной функции для создания комбинаций. Как сказал Rosettacode: «Этот код эликсира только что преобразован из Erlang»:

defmodule RC do
  def comb(0, _), do: [[]]
  def comb(_, []), do: []
  def comb(m, [h|t]) do
    (for l <- comb(m-1, t), do: [h|l]) ++ comb(m, t)
  end
end

{m, n} = {3, 5}
list = for i <- 1..n, do: i
Enum.each(RC.comb(m, list), fn x -> IO.inspect x end)

https://rosettacode.org/wiki/Combinations#Elixir

...