homoiconic Elixir Elixir "homoiconic"
* <
****
*
****
*
Elixir
**AST**
iex(1)> 1 + 2 + 3
6
iex(2)> sum_prog = quote do: 1 + 2 + 3
{:+, [context: Elixir, import: Kernel],
[{:+, [context: Elixir, import: Kernel], [1, 2]}, 3]}
**AST**
iex(3)> Code.eval_quoted(sum_prog)
{6, []}
iex(4)> Code.eval_quoted(sum_prog) |> elem(0)
6
**AST**
iex(5)> Macro.to_string(sum_prog)
"1 + 2 + 3"
ASTElixirElixir
**beam** ElixirASTbeamErlangAST
* Elixir Erlang beam -- Erlang