title: Homoiconicidad
text: # 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.
  
  