Digging Ridiculously Deep

Here’s the internal representation of a simple expression:

 iex(1)>​ ​quote​ ​do​: 1 + 2
 {:+, [context: Elixir, import: Kernel], [1, 2]}

It’s just a three-element tuple. In this particular case, the first element is the function (or macro), the second is housekeeping metadata, and the third is the arguments.

We know we can evaluate this code fragment using eval_quoted, and we can save typing by leaving off the metadata:

 iex>​ Code.eval_quoted {​:+​, [], [1,2]}
 {3,[]}

And now we can start to see the promise (and danger) of a homoiconic language (a language in which the internal representation is expressed in the language itself). Because code is just tuples and because we can manipulate those tuples, we have the ...

Get Programming Elixir ≥ 1.6 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.