Create function on-the-fly?

Here is another example :

 defmodule Test do

defmacro rule(namex) do
	quote do
		def unquote(namex)() do
		 true
		end
	end
end

@lst [
	{:sum, 5, 7 },
	{:sum, 1, 3}
]

for { name, goal, work } <- @lst do
	def unquote(name)({ unquote(Macro.escape(goal)), unquote(Macro.escape(work)) }), do: true
end
end 



iex(8)> Test.rule(:test) 
** (ArgumentError) cannot invoke def/2 outside module
(elixir) lib/kernel.ex:5122: Kernel.assert_module_scope/3
(elixir) lib/kernel.ex:3893: Kernel.define/4
(elixir) expanding macro: Kernel.def/2
iex:8: (file)
(prod_sys) expanding macro: Test.rule/1
iex:8: (file)

iex(8)> Test.sum({5,7}) 
true

iex(9)> Test.sum({1,3})  
true