You can do the same with recursion:
list = [1, 2, 3, 4]
defmodule Rec do
def compare(list, acc \\ [])
def compare([_], acc) do
acc
|> Enum.reverse()
|> List.flatten()
end
def compare([cur | rest], acc) do
compare(rest, [Enum.map(rest, &{cur, &1}) | acc])
end
end
Rec.compare(list)
# [{1, 2}, {1, 3}, {1, 4}, {2, 3}, {2, 4}, {3, 4}]
And you can look at combinatorics: GitHub - tallakt/comb: Elixir combinatorics - permutations and combinations of lists