defmodule Queens do def solve(0, _m), do: [[]] def solve(n, m) do for done_queens <- solve(n-1, m), avail_pos <- (Enum.to_list(1..m) -- done_queens), safe_pos(avail_pos, done_queens, 1), do: [avail_pos | done_queens] end defp safe_pos(_, [], _), do: true defp safe_pos(pos, [queen | queens], distance) do (pos != queen + distance) and (pos != queen - distance) and safe_pos(pos, queens, distance+1) end end :io.write Queens.solve(8,8)