2011-06-27 10 views
19

Estaba tratando de entender el Wikipedia article on homoiconity, pero es demasiado detallado y no explica la teoría principal detrás de la palabra concisamente. Debo añadir que no soy un hablante nativo de inglés, por lo que prefiero las citas simples en inglés de papel blanco sobre académico.¿Qué significa exactamente homoiconicity?

Entonces, ¿qué significa exactamente si un idioma es homoicónico? ¿Qué hace que C#, Java o JavaScript no sean homicónicos?

+0

No creo que signifique mucho de nada, como se explica aquí: http://www.expressionsofchange.org/dont-say-homoiconic/ –

Respuesta

10

Significa "código como datos" que es una característica general de la familia Lisp.

(add 2 3) 

Al igual que la cadena anterior, que es a la vez una lista y también una llamada a la función. El prefijo "Homo" representa esta característica.

9

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.

Cuestiones relacionadas