Homoiconicidad
# Homoiconicidad

En programación informática, la homoiconicidad es una propiedad de algunos lenguajes de programación, en los cuales la representación primaria de estos es también una estructura de datos en un tipo primitivo del lenguaje.

## Orígenes

La fuente original es la publicación Macro Instruction Extensions of Compiler Languages, según la temprana y muy influyente publicación TRAC, A Text-Handling Language:

Alan Kay usó y posiblemente popularizó el término "homoicónico" a través de su tesis doctoral de 1969:

## Uso y ventajas

Una ventaja de la homoiconicidad es que extender el lenguaje con nuevos conceptos habitualmente se hace más sencillo. Ya que los datos representando el código puede ser pasado entre las capas base y meta del programa. El árbol de sintaxis abstracta de una función puede ser compuesta y manipulada como una estructura de datos en la capa meta, y entonces, evaluada

Una demostración típica de la homoiconicidad es el evaluador metacircular.

## Lenguajes homoicónicos

Los lenguajes considerados homoicónicos son:

* Curl
* Factor
* Forth
* Ío
* Ioke
* Joy
* Julia
* Casi todos los miembros de la familia Lisp
* PostScript
* Prolog
* REBOL
* Tcl
* TRAC
* Smalltalk
* SNOBOL
* V
* XSLT

En los sistemas con arquitectura Von Neumann (incluyendo la vasta mayoría de los sistemas actuales), el código máquina también tiene esta propiedad, siendo el tipo de datos bytes en memoria.

