Jacobo Martín

Software writer

Homo-what?

Nowadays, with the virtual worlds of Internet, social networks, etc, words that didn’t even exist twenty years ago, like selfie, are massively accepted and used. Our languages are great at allowing us the possibility to extend it, inventing or adapting words. This way, we could create a verb from the word selfie, perhaps something like selfiefy or selfiecate? By the way, I must admit I don’t even like the word selfie.

Rules or censorship?

Do you imagine having reserved words in your own language, words that couldn’t be expanded or freely reused depending on context and different needs? This is what happens in programming languages like Java: you have a bunch of words that the compiler won’t even let you use if they’are not in a concrete place and context, regardless of your needs of expression.

That language is alive!

Has it ever happened to you that you wanted to express something and you couldn’t find a word in your own language that exactly fitted your intended meaning? Have you ever invented a word or reused an existing one in a context in which it had never been used before?

I suppose that something like this happened to Douglas McIlroy, some sixty years ago, when he coined the word homoiconic. He used it in the context of text-processing inside compilers:

[…] because procedures and text have the same representation inside and outside the processor, the term homoiconic is applicable, from homo meaning the same, and icon meaning representation.

Douglas McIlroy, Macro Instruction Extensions of Compiler Languages

LISP programming language is homoiconic. And Clojure, as a LISP dialect, is homoiconic too. That doesn’t mean that Clojure is an icon for the gay movement, nor that Clojure likes to have sex with icons representing the Clojure logo. No. What this means is that, in short, code is not only code: it’s also data. This means not only that you could pass code as function’s arguments or return values; it also means that you could even redefine, for instance, the word if, for or even private if they existed in Clojure as they do in Java: the Clojure compiler wouldn’t complain about it like it would in Java, which is not homoiconic.

By the way, I’m not saying you should redefine everything. I’m just saying it’s possible. And that simple thought –it’s possible- is another reason why I love Clojure.

Language is a process of free creation; its laws and principles are fixed, but the manner in which the principles of generation are used is free and infinitely varied. Even the interpretation and use of words involves a process of free creation.

Noam Chomsky