Un símbolo en la programación de computadoras es un tipo de datos primitivo cuyas instancias tienen una forma única legible por humanos. Los símbolos se pueden utilizar como identificadores . En algunos lenguajes de programación , se denominan átomos . [1] La singularidad se refuerza manteniéndolos en una tabla de símbolos . El uso más común de símbolos por parte de los programadores es para realizar la reflexión del lenguaje (particularmente para devoluciones de llamada ), y el más común indirectamente es su uso para crear enlaces de objetos .
En la implementación más trivial , se denominan esencialmente números enteros (por ejemplo, el tipo enumerado en C).
Apoyo
Los siguientes lenguajes de programación brindan soporte en tiempo de ejecución para símbolos:
idioma | tipo nombre (s) | ejemplo literal (s) |
---|---|---|
Lisp común ANSI | símbolo, palabra clave | símbolo , palabra clave: |
Clojure | símbolo, [2] palabra clave [3] | símbolo' , palabra clave: |
Dart (lenguaje de programación) | Símbolo [4] | #sym |
Elixir | átomo, símbolo | : sym |
Erlang | átomo | sym o 'sym' |
Julia | Símbolo | : sym |
C objetivo | SEL | @selector (sym) |
PICAXE BÁSICO | símbolo | símbolo deja nombre = variable |
Prólogo | átomo, símbolo | sym o 'sym' |
Rubí | Símbolo | : sym o : 'sym' |
Scala | Scala Símbolo | 'símbolo |
Esquema | símbolo | sym |
Charla | Símbolo | #sym o # 'sym' |
SML / NJ | Atom.atom | |
JavaScript (ES6 y posterior) | Símbolo | Símbolo ("sym"); |
Wolfram Language | Símbolo | Símbolo ["sym"] o sym |
K (lenguaje de programación) | símbolo | `sym |
Ceceo
Un símbolo en Lisp es único en un espacio de nombres (o paquete en Common Lisp ). Se puede probar 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 se desconoce un símbolo, el lector Lisp crea un nuevo símbolo.
En Common Lisp, los símbolos tienen los siguientes atributos: un nombre, un valor, una función, una lista de propiedades y un paquete. [5]
En Common Lisp también es posible que un símbolo no esté incluido en un paquete. Estos símbolos se pueden imprimir, pero cuando se leen, es necesario crear un nuevo símbolo. Dado que 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 y nuevas líneas. 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 construcciones de programación con nombre: variables, funciones, macros, clases, tipos, etiquetas goto y más. Los símbolos se pueden integrar en un paquete. [6] Los símbolos de palabras clave se autoevalúan [7] y se incluyen en el paquete denominado KEYWORD.
Ejemplos de
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 iniciales en sus representaciones impresas son símbolos de palabras clave . Estos están incluidos en el paquete de palabras clave.
: símbolo-palabra clave
Una representación impresa de un símbolo puede incluir un nombre de paquete. Se escriben dos dos puntos entre el nombre del paquete y el nombre del símbolo.
nombre-paquete :: nombre-símbolo
Los paquetes pueden exportar símbolos. Entonces, solo se escriben dos puntos entre el nombre del paquete y el nombre del símbolo.
paquete: símbolo exportado
Los símbolos, que no están incluidos en un paquete, también se pueden crear y tener una notación:
#: símbolo-uninterned
Prólogo
En Prolog , los símbolos (o átomos) son los tipos de datos primitivos primarios, similares a los números. [8] La notación exacta puede diferir en los diferentes dialectos de Prolog. Sin embargo, siempre es bastante simple (no se necesitan citas ni caracteres iniciales especiales).
A diferencia de otros lenguajes, es posible dar algún significado a los símbolos creando algunos hechos y / o reglas de Prolog.
Ejemplos de
El siguiente ejemplo demuestra dos hechos (que describen qué es el padre ) y una regla (que describe el significado de hermano ). Estas tres frases utilizan símbolos (padre, zeus, hermes, perseo y hermano) y algunas variables abstractas (X, Y y Z). La relación con la madre se ha omitido para mayor claridad.
padre ( zeus , hermes ). padre ( zeus , perseus ).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] Pueden usarse como un identificador o una cadena interna. [9] Dos símbolos con el mismo contenido siempre se referirán al mismo objeto. [10] Se considera una buena práctica utilizar símbolos como claves para una matriz asociativa en Ruby. [9] [11]
Ejemplos de
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, viceversa:
irb (principal): 001: 0> my_symbol = "¡Hola, mundo!" . interno =>: "¡Hola, mundo!" irb (principal): 002: 0> my_symbol = "¡Hola, mundo!" . to_sym =>: "¡Hola, mundo!" irb (principal): 003: 0> my_string = : hola . to_s => "hola"
Los símbolos son objetos de la Symbol
clase en Ruby: [12]
irb (principal): 004: 0> my_symbol = : hello_world =>: hello_world irb (principal): 005: 0> my_symbol . longitud => 11 irb (principal): 006: 0> my_symbol . clase => Símbolo
Los símbolos se utilizan comúnmente para enviar mensajes dinámicamente a (métodos de llamada en) objetos:
irb (principal): 007: 0> "aoboc" . split ( "o" ) => ["a", "b", "c"] irb (principal): 008: 0> "aoboc" . enviar ( : dividir , "o" ) # mismo resultado => ["a", "b", "c"]
Símbolos como claves de una matriz asociativa:
irb (principal): 009: 0> my_hash = { a : "manzana" , b : "banana" } => {: a => "manzana" ,: b => "banana"} irb (principal): 010: 0> my_hash [ : a ] => "manzana" irb (principal): 011: 0> my_hash [ : b ] => "banana"
Charla
En Smalltalk , los símbolos se pueden crear con una forma literal o convirtiendo una cadena. Se pueden utilizar como identificador o como cadena interna. Dos símbolos con el mismo contenido siempre se referirán al mismo objeto. [13] En la mayoría de las implementaciones de Smalltalk, los selectores (nombres de métodos) se implementan como símbolos.
Ejemplos de
El siguiente es un ejemplo simple de un símbolo literal en Smalltalk:
my_symbol : = # 'an identifier' " 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 también es un literal de símbolo"
Las cadenas se pueden convertir en símbolos, viceversa:
my_symbol : = '¡Hola, mundo!' asSymbol "=> # '¡Hola, mundo!' " my_string : = #hello: asString " => 'hola:' "
Los símbolos se ajustan al symbol
protocolo y su clase se llama Symbol
en la mayoría de las implementaciones:
my_symbol : = #hello_world my_symbol class "=> Símbolo"
Los símbolos se utilizan comúnmente para enviar mensajes dinámicamente a (métodos de llamada en) objetos:
"igual que 'foo' en: 2" 'foo' realiza: #at: with: 2 "=> $ o"
Referencias
- ^ a b c Hunt, Dave Thomas; Chad Fowler; Andy (2001). Programación de Ruby, la guía pragmática del programador; [incluye Ruby 1.8] (2. ed., 10. print. ed.). Raleigh, Carolina del Norte: The Pragmatic Bookshelf. ISBN 978-0-9745140-5-5.
- ^ Símbolos en la página sobre estructuras de datos
- ^ Palabras clave en la página sobre estructuras de datos
- ^ "Un recorrido por el lenguaje Dart | Símbolos" . Lenguaje de programación Dart . Consultado el 17 de enero de 2021 .
- ^ Common Lisp HyperSpec, símbolo de clase de sistema
- ^ Common Lisp HyperSpec, paquete de clase de sistema
- ^ Peter Norvig : Paradigmas de programación de inteligencia artificial: estudios de caso en Common Lisp , Morgan Kaufmann, 1991, ISBN 1-55860-191-0 , Web
- ^ Bratko, Ivan (2001). Programación de prolog para inteligencia artificial . Harlow, Inglaterra; Nueva York: Addison Wesley. ISBN 978-0-201-40375-6.
- ^ a b Kidd, Eric. "13 formas de mirar un símbolo de rubí" . Hacks aleatorios . Consultado el 10 de julio de 2011 .
- ^ "Programación de Ruby: la guía del programador pragmático" .
- ^ "Uso de símbolos por una razón equivocada" . Notas gnómicas .
- ^ "Símbolo" . Documentación de Ruby . Consultado el 10 de julio de 2011 .
- ^ http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf Estándar ANSI Smalltalk.