A programming language is homoiconic if a program written in it can be manipulated as data using the language. The program’s internal representation can thus be inferred just by reading the program itself. This property is often summarised by saying that the language treats code as data. 1