stringtranslate.com

Símbolo (programación)

Un símbolo en programación informática es un tipo de datos primitivo cuyas instancias tienen una forma legible para humanos. Los símbolos se pueden utilizar como identificadores . En algunos lenguajes de programación , se denominan átomos . [1] La unicidad se refuerza manteniéndolos en una tabla de símbolos . El uso más común de los símbolos por parte de los programadores es realizar la reflexión del lenguaje (en particular para las devoluciones de llamadas ), y el uso indirecto más común es su uso para crear vínculos entre objetos .

En la implementación más trivial , son esencialmente números enteros nombrados ; por ejemplo, el tipo enumerado en lenguaje C.

Apoyo

Los siguientes lenguajes de programación proporcionan soporte en tiempo de ejecución para símbolos:

Julia

Los símbolos en Julia son cadenas internas que se utilizan para representar identificadores en el código de Julia analizado ( AST ) y como nombres o etiquetas para identificar entidades (por ejemplo, como claves en un diccionario). [5]

Ceceo

En Lisp, un símbolo es único en un espacio de nombres (o paquete en Common Lisp ). Se puede comprobar la igualdad de los símbolos con la función EQ. Los programas Lisp pueden generar nuevos símbolos en tiempo de ejecución. Cuando Lisp lee datos que contienen símbolos representados textualmente, se hace referencia a los símbolos existentes. Si un símbolo es desconocido, el lector Lisp crea un símbolo nuevo.

En Common Lisp, los símbolos tienen los siguientes atributos: un nombre, un valor, una función, una lista de propiedades y un paquete. [6]

En Common Lisp también es posible que un símbolo no esté internado en un paquete. Dichos símbolos se pueden imprimir, pero al volver a leerlos, se debe crear un nuevo símbolo. Como no está internado , el símbolo original no se puede recuperar de un paquete.

En Common Lisp, los símbolos pueden utilizar cualquier carácter, incluidos los espacios en blanco, como espacios en blanco y saltos de línea. Si un símbolo contiene un carácter de espacio en blanco, debe escribirse como |este es un símbolo|. Los símbolos se pueden utilizar como identificadores para cualquier tipo de construcción de programación con nombre: variables, funciones, macros, clases, tipos, etiquetas goto y más. Los símbolos se pueden incluir en un paquete. [7] Los símbolos de palabras clave se autoevaluan [8] y se incluyen en el paquete llamado KEYWORD.

Ejemplos

La siguiente es una representación externa simple de un símbolo Common Lisp :

esto es un simbolo

Los símbolos pueden contener espacios en blanco (y todos los demás caracteres):

|Este es un símbolo con espacios en blanco|

En Common Lisp, los símbolos con dos puntos al principio de su representación impresa son símbolos de palabras clave . Estos se encuentran en el paquete de palabras clave.

:símbolo de palabra clave

Una representación impresa de un símbolo puede incluir el nombre de un paquete. Se escriben dos puntos entre el nombre del paquete y el nombre del símbolo.

nombre-del-paquete::nombre-del-símbolo

Los paquetes pueden exportar símbolos. En ese caso, solo se escriben dos puntos entre el nombre del paquete y el nombre del símbolo.

paquete:símbolo-exportado

También se pueden crear símbolos que no están incluidos en un paquete y tener una notación:

#:símbolo no interno

Posdata

En PostScript , las referencias a objetos de nombre pueden ser literales o ejecutables , lo que influye en el comportamiento del intérprete cuando las encuentra. Los operadores cvxy cvlse pueden utilizar para realizar conversiones entre las dos formas. Cuando los nombres se construyen a partir de cadenas mediante el cvnoperador , el conjunto de caracteres permitidos no tiene restricciones.

Prólogo

En Prolog , los símbolos (o átomos) son los principales tipos de datos primitivos, similares a los números. [9] La notación exacta puede diferir en los distintos dialectos de Prolog. Sin embargo, siempre es bastante simple (no se necesitan comillas ni caracteres especiales iniciales).

A diferencia de muchos otros lenguajes, es posible dar un significado a los símbolos creando algunos hechos y/o reglas en Prolog.

Ejemplos

El siguiente ejemplo demuestra dos hechos (que describen qué es padre ) y una regla (que describe el significado de hermano ). Estas tres oraciones utilizan símbolos (padre, Zeus, Hermes, Perseo y hermano) y algunas variables abstractas (X, Y y Z). La relación con la madre se omite para mayor claridad.

padre ( zeus ,  hermes ).padre ( zeus , perseo  ) .hermano ( X ,  Y )  :-  padre ( Z ,  X ),  padre ( Z ,  Y ).

Rubí

En Ruby , los símbolos se pueden crear con una forma literal o convirtiendo una cadena. [1] Se pueden usar como un identificador o una cadena interna. [10] Dos símbolos con el mismo contenido siempre harán referencia al mismo objeto. [11] Se considera una buena práctica usar símbolos como claves para una matriz asociativa en Ruby. [10] [12]

Ejemplos

El siguiente es un ejemplo simple de un símbolo literal en Ruby: [1]

my_symbol = :a my_symbol = :"un identificador"    

Las cadenas se pueden convertir en símbolos, y viceversa:

irb(main):001:0> mi_símbolo = "¡Hola, mundo!" . intern => : "¡Hola, mundo!" irb(main):002:0> mi_símbolo = "¡Hola, mundo!" . to_sym => : "¡Hola, mundo!" irb(main):003:0> mi_cadena = :hola . to_s => "hola"        

Los símbolos son objetos de la Symbolclase en Ruby: [13]

irb(principal):004:0> mi_símbolo = :hola_mundo => :hola_mundo irb(principal):005:0> mi_símbolo . longitud => 11 irb(principal):006:0> mi_símbolo . clase => Símbolo    

Los símbolos se utilizan comúnmente para enviar mensajes dinámicamente a objetos (métodos de llamada en ellos):

irb(main):007:0> "aoboc" .split ( " o" ) = > ["a", "b", "c"] irb(main):008:0> "aoboc" .send ( :split , "o" ) # mismo resultado => ["a", "b", "c"]  

Símbolos como claves de una matriz asociativa:

irb(principal):009:0> mi_hash = { a : "manzana" , b : "plátano" } => {:a=>"manzana", :b=>"plátano"} irb(principal):010:0> mi_hash [ :a ] => "manzana" irb(principal):011:0> mi_hash [ :b ] => "plátano"         

Charla informal

En Smalltalk , los símbolos se pueden crear con una forma literal o mediante la conversión de una cadena. Se pueden utilizar como un identificador o una cadena interna. Dos símbolos con el mismo contenido siempre harán referencia al mismo objeto. [14] En la mayoría de las implementaciones de Smalltalk, los selectores (nombres de métodos) se implementan como símbolos.

Ejemplos

El siguiente es un ejemplo simple de un símbolo literal en Smalltalk:

my_symbol  :=  # 'un identificador'  " Literal de símbolo " my_symbol  :=  #a  " Técnicamente, este es un literal de selector. En la mayoría de las implementaciones, "  " los selectores son símbolos, por lo que este también es un literal de símbolo "

Las cadenas se pueden convertir en símbolos, y viceversa:

my_symbol  :=  '¡Hola, mundo!'  asSymbol  " => #'¡Hola, mundo!' " my_string  :=  #hello:  asString  " => 'hello:' "

Los símbolos se ajustan al symbolprotocolo y su clase se llama Symbolen la mayoría de las implementaciones:

mi_simbolo  :=  #hola_mundo mi_simbolo  clase  " => Símbolo "

Los símbolos se utilizan comúnmente para enviar mensajes dinámicamente a objetos (métodos de llamada en ellos):

" lo mismo que 'foo' en: 2 " 'foo'  realiza:  #en:  con:  2  " => $o "

Referencias

  1. ^ abc Thomas, Dave ; Fowler, Chad; Hunt, Andy (2001). Programación en Ruby: la guía del programador pragmático; [incluye Ruby 1.8] (2.ª edición, 10.ª edición impresa). Raleigh, Carolina del Norte: The Pragmatic Bookshelf. ISBN 978-0-9745140-5-5.
  2. ^ Símbolos en la página sobre Estructuras de Datos
  3. ^ Palabras clave en la página sobre Estructuras de Datos
  4. ^ "Un recorrido por el lenguaje Dart | Símbolos". Lenguaje de programación Dart . Consultado el 17 de enero de 2021 .
  5. ^ "Julia Core.Symbol". Documentación de Julia . Consultado el 31 de mayo de 2022 .
  6. ^ "CLHS: Clase de sistema SÍMBOLO". www.lispworks.com .
  7. ^ "CLHS: PAQUETE de clases de sistema". www.lispworks.com .
  8. ^ Peter Norvig : Paradigmas de programación de inteligencia artificial: estudios de casos en Common Lisp , Morgan Kaufmann, 1991, ISBN 1-55860-191-0 , Web 
  9. ^ Bratko, Ivan (2001). Programación Prolog para inteligencia artificial . Harlow, Inglaterra; Nueva York: Addison Wesley. ISBN 978-0-201-40375-6.
  10. ^ ab Kidd, Eric (20 de enero de 2007). "13 maneras de mirar un símbolo de rubí". Random Hacks . Consultado el 10 de julio de 2011 .
  11. ^ "Programación Ruby: La guía del programador pragmático". ruby-doc.com .
  12. ^ "Uso de símbolos por razones equivocadas". Notas gnómicas .
  13. ^ "Símbolo". Documentación de Ruby . Consultado el 10 de julio de 2011 .
  14. ^ http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf Estándar ANSI Smalltalk.