Current section

Files

Jump to
pantagruel lib bool_alg macros.ex
Raw

lib/bool_alg/macros.ex

defmodule BoolAlg.Macros do
defmacro deftrue(operation, result) do
quote do
defp reduce(%__MODULE__{
op: unquote(operation),
x: true,
y: var!(q)
}) do
unquote(result)
end
defp reduce(%__MODULE__{
op: unquote(operation),
x: var!(q),
y: true
}) do
unquote(result)
end
end
end
defmacro deftrue(operation, result, result2) do
quote do
defp reduce(%__MODULE__{
op: unquote(operation),
x: true,
y: var!(q)
}) do
unquote(result)
end
defp reduce(%__MODULE__{
op: unquote(operation),
x: var!(q),
y: true
}) do
unquote(result2)
end
end
end
defmacro deffalse(operation, result) do
quote do
defp reduce(%__MODULE__{
op: unquote(operation),
x: false,
y: var!(q)
}) do
unquote(result)
end
defp reduce(%__MODULE__{
op: unquote(operation),
x: var!(q),
y: false
}) do
unquote(result)
end
end
end
defmacro deffalse(operation, result, result2) do
quote do
defp reduce(%__MODULE__{
op: unquote(operation),
x: false,
y: var!(q)
}) do
unquote(result)
end
defp reduce(%__MODULE__{
op: unquote(operation),
x: var!(q),
y: false
}) do
unquote(result2)
end
end
end
end