By homoiconicity, I was referring to Julia and Elixir, both of which are cited as being homoiconic (even though some purists disagree).<p>Also, I think &quot;Homoiconicity isn&#x27;t the point&quot; misses the point.  Homoiconicity isn&#x27;t about syntax - indeed, Lisp isn&#x27;t <i>technically</i> confined to s-expressions, and was originally designed for M-expressions before folks realized that s-expressions were much easier to implement - but rather about the ability to represent a program as ordinary data and to manipulate it as such.  Yeah, I can do all sorts of metaprogramming in, say, Ruby or Perl, but you won&#x27;t be able to go very far before you end up passing strings into `eval`; this is because they&#x27;re not homoiconic (at least in their current forms).  Meanwhile, the ability of languages like Elixir to actually modify a program&#x27;s syntax tree directly - a.k.a. homoiconicity - makes metaprogramming <i>much</i> easier.  The two concepts go hand in hand.<p>S-expressions happen to be very convenient for defining tree-like structures, like - for example - Lisp programs.  They&#x27;re not strictly required, however.