Packages
truth_table
0.1.0
Generate truth tables in Elixir
Retired package: Deprecated - abandoned & not particularly helpful
Current section
Files
Jump to
Current section
Files
lib/truth_table.ex
defmodule TruthTable do
@moduledoc """
Documentation for TruthTable.
"""
use Bitwise, only_operators: true
@doc """
Generate all combinations of `size` boolean values.
There is no order guarantee.
## Examples
iex> 2 |> TruthTable.inputs() |> MapSet.new()
MapSet.new([[false, false], [false, true], [true, true], [true, false]])
"""
def inputs(size) when is_integer(size) and size >= 0 do
1
|> Bitwise.<<<(size)
|> Kernel.-(1)
|> Range.new(0)
|> Enum.map(&generate_row(size, &1, []))
end
def inputs(size) do
raise ArgumentError, "Expected non-negative integer, got: #{inspect(size)}"
end
defp generate_row(0, _value, row) do
row
end
defp generate_row(count, value, row) do
generate_row(count - 1, value >>> 1, [invert(value &&& 1) | row])
end
defp invert(0), do: true
defp invert(_), do: false
end