El esquema es homo-icónico porque sus programas tienen una interpretación como estructuras de datos.
'(define (foo x) (* x x))
es una lista, el primer elemento de los cuales es define
, la segunda (foo x)
(una lista), y así sucesivamente. La comilla '
significa: no interpretar esto, déjelo como una lista. Si eliminamos la '
obtenemos
(define (foo x) (* x x))
que es una definición de función Esquema. Debido a que las definiciones del programa Scheme son expresiones de lista anidadas (y por lo tanto una especie de "literales de árbol de sintaxis"), y Scheme es un lenguaje dinámico, puede jugar trucos con esto para construir sistemas de generación de macro/código muy potentes.
Ahora Java no es homo-icónico simplemente porque no proporciona este tipo de "literales de programa" que evalúan para analizar fragmentos de árbol. Por supuesto, se puede definir una cadena
String helloWorld =
"class Hello { public static void main(System.out.println(\"Hello, world!\"); }";
que se podría analizar y alimentar a un compilador, pero eso es incómodo, porque es una cadena en lugar de un término estructurado.
No creo que signifique mucho de nada, como se explica aquí: http://www.expressionsofchange.org/dont-say-homoiconic/ –