There&#x27;s another constraint, as seen in the definition of homoiconicity from Wikipedia. I&#x27;ll paste it once again:<p>&gt; In computer programming, homoiconicity [...] is a property of some programming languages in which <i>the program structure is similar to its syntax</i>, and therefore the program&#x27;s internal representation can be inferred by reading the text&#x27;s layout. If a language is homoiconic, it means that the language text has the same structure as its abstract syntax tree (i.e. the AST and the syntax are isomorphic). This allows all code in the language to be accessed and transformed as data, using the same representation.<p>As I noted, a similarity is subjective, but I never claimed that it&#x27;s not needed as a criterion. So, what I claim is that homoiconicity happens when the AST representation consists of only literal datatypes of the language AND the AST structure is &quot;similar&quot; to the original code.<p>That&#x27;s it. And also:<p>&gt; I can represent an AST in array literals in essentially any language<p>I doubt it, but that&#x27;s irrelevant. Had you done it you&#x27;d essentially reimplement the language of your choice and then we&#x27;re not talking about that language in general anymore, but about your implementation. What you say here is that &quot;every language can be made homoiconic given appropriate AST implementation&quot;. And that&#x27;s <i>probably</i> true, although I suspect it gets too hard to do in practice for more complex syntaxes.<p>May I ask where are you getting your strong convictions about homoiconicity from? If you read the Wiki page you&#x27;ll notice the use of less than precise words, like &quot;similar&quot; or &quot;Languages which are <i>considered</i> homoiconic <i>include</i>&quot; and so on. The concept itself is not as clear-cut as you seem to believe and it&#x27;s mostly defined by examples.<p>Also, you still didn&#x27;t provide a convincing argument that Erlang is not homoiconic; you only claimed that &quot;it isn&#x27;t&quot; and moved on.<p>EDIT: as an example of how subjective homoiconicity is take a look at Julia. Listed on the wikipedia as homoiconic, here are the details: <a href="http:&#x2F;&#x2F;docs.julialang.org&#x2F;en&#x2F;latest&#x2F;manual&#x2F;metaprogramming&#x2F;" rel="nofollow">http:&#x2F;&#x2F;docs.julialang.org&#x2F;en&#x2F;latest&#x2F;manual&#x2F;metaprogramming&#x2F;</a> - if Julia is homoiconic, then Erlang and Elixir are too. And Haxe, and Dylan. Are they? I don&#x27;t know, I&#x27;m not going to argue about this. As I said, homoiconicity is only interesting as a way of simplifying macro creation; any more discussion is honestly useless to me.