Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Support  



1.1  Julia  





1.2  Lisp  



1.2.1  Examples  







1.3  PostScript  





1.4  Prolog  



1.4.1  Examples  







1.5  Ruby  



1.5.1  Examples  







1.6  Smalltalk  



1.6.1  Examples  









2 References  














Symbol (programming)






Dansk
 

Edit links
 









Article
Talk
 

















Read
Edit
View history
 








Tools
   


Actions  



Read
Edit
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Cite this page
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 
















Appearance
   

 






From Wikipedia, the free encyclopedia
 


Asymbolincomputer programming is a primitive data type whose instances have a human-readable form. Symbols can be used as identifiers. In some programming languages, they are called atoms.[1] Uniqueness is enforced by holding them in a symbol table. The most common use of symbols by programmers is to perform language reflection (particularly for callbacks), and the most common indirectly is their use to create object linkages.

In the most trivial implementation, they are essentially named integers; e.g., the enumerated typeinC language.

Support

[edit]

The following programming languages provide runtime support for symbols:

language type name(s) example literal(s)
ANSI Common Lisp symbol, keyword symbol, :keyword
Clojure symbol,[2] keyword[3] 'symbol, :keyword
Dart Symbol[4] #sym
Elixir atom, symbol :sym
Erlang atom symor'sym'
JavaScript (ES6 and later) Symbol Symbol("sym");
Julia Symbol :sym
K symbol `sym
Objective-C SEL @selector(sym)
PICAXE BASIC symbol symbol let name = variable
PostScript name /symorsym
Prolog atom, symbol symor'sym'
Ruby Symbol :symor:'sym'
Scala scala.Symbol 'symbol
Scheme symbol sym
Smalltalk Symbol #symor#'sym'
SML/NJ Atom.atom
Wolfram Language Symbol Symbol["sym"]orsym

Julia

[edit]

Symbols in Julia are interned strings used to represent identifiers in parsed Julia code(ASTs) and as names or labels to identify entities (for example as keys in a dictionary).[5]

Lisp

[edit]

A symbol in Lisp is unique in a namespace (orpackageinCommon Lisp). Symbols can be tested for equality with the function EQ. Lisp programs can generate new symbols at runtime. When Lisp reads data that contains textual represented symbols, existing symbols are referenced. If a symbol is unknown, the Lisp reader creates a new symbol.

In Common Lisp, symbols have the following attributes: a name, a value, a function, a list of properties and a package.[6]

In Common Lisp it is also possible that a symbol is not interned in a package. Such symbols can be printed, but when read back, a new symbol needs to be created. Since it is not interned, the original symbol can not be retrieved from a package.

In Common Lisp symbols may use any characters, including whitespace, such as spaces and newlines. If a symbol contains a whitespace character, it needs to be written as |this is a symbol|. Symbols can be used as identifiers for any kind of named programming constructs: variables, functions, macros, classes, types, goto tags and more. Symbols can be interned in a package.[7] Keyword symbols are self-evaluating,[8] and interned in the package named KEYWORD.

Examples

[edit]

The following is a simple external representation of a Common Lisp symbol:

this-is-a-symbol

Symbols can contain whitespace (and all other characters):

|This is a symbol with whitespace|

In Common Lisp symbols with a leading colon in their printed representations are keyword symbols. These are interned in the keyword package.

:keyword-symbol

A printed representation of a symbol may include a package name. Two colons are written between the name of the package and the name of the symbol.

package-name::symbol-name

Packages can export symbols. Then only one colon is written between the name of the package and the name of the symbol.

package:exported-symbol

Symbols, which are not interned in a package, can also be created and have a notation:

#:uninterned-symbol

PostScript

[edit]

InPostScript, references to name objects can be either literalorexecutable, influencing the behaviour of the interpreter when encountering them. The cvx and cvl operators can be used to convert between the two forms. When names are constructed from strings by means of the cvn operator, the set of allowed characters is unrestricted.

Prolog

[edit]

InProlog, symbols (or atoms) are the main primitive data types, similar to numbers.[9] The exact notation may differ in different Prolog dialects. However, it is always quite simple (no quotations or special beginning characters are necessary).

Contrary to many other languages, it is possible to give symbols a meaning by creating some Prolog facts and/or rules.

Examples

[edit]

The following example demonstrates two facts (describing what fatheris) and one rule (describing the meaningofsibling). These three sentences use symbols (father, zeus, hermes, perseus and sibling) and some abstract variables (X, Y and Z). The mother relationship is omitted for clarity.

father(zeus, hermes).
father(zeus, perseus).

sibling(X, Y) :- father(Z, X), father(Z, Y).

Ruby

[edit]

InRuby, symbols can be created with a literal form, or by converting a string.[1] They can be used as an identifier or an interned string.[10] Two symbols with the same contents will always refer to the same object.[11] It is considered a best practice to use symbols as keys to an associative array in Ruby.[10][12]

Examples

[edit]

The following is a simple example of a symbol literal in Ruby:[1]

my_symbol = :a
my_symbol = :"an identifier"

Strings can be coerced into symbols, vice versa:

irb(main):001:0> my_symbol = "Hello, world!".intern 
=> :"Hello, world!"
irb(main):002:0> my_symbol = "Hello, world!".to_sym 
=> :"Hello, world!"
irb(main):003:0> my_string = :hello.to_s
=> "hello"

Symbols are objects of the Symbol class in Ruby:[13]

irb(main):004:0> my_symbol = :hello_world
=> :hello_world
irb(main):005:0> my_symbol.length 
=>11
irb(main):006:0> my_symbol.class 
=> Symbol

Symbols are commonly used to dynamically send messages to (call methods on) objects:

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

Symbols as keys of an associative array:

irb(main):009:0> my_hash = { a: "apple", b: "banana" }
=> {:a=>"apple", :b=>"banana"}
irb(main):010:0> my_hash[:a] 
=> "apple"
irb(main):011:0> my_hash[:b] 
=> "banana"

Smalltalk

[edit]

InSmalltalk, symbols can be created with a literal form, or by converting a string. They can be used as an identifier or an interned string. Two symbols with the same contents will always refer to the same object.[14] In most Smalltalk implementations, selectors (method names) are implemented as symbols.

Examples

[edit]

The following is a simple example of a symbol literal in Smalltalk:

my_symbol := #'an identifier' " Symbol literal "
my_symbol := #a               " Technically, this is a selector literal. In most implementations, "
                              " selectors are symbols, so this is also a symbol literal "

Strings can be coerced into symbols, vice versa:

my_symbol := 'Hello, world!' asSymbol " => #'Hello, world!' "
my_string := #hello: asString         " => 'hello:' "

Symbols conform to the symbol protocol, and their class is called Symbol in most implementations:

my_symbol := #hello_world
my_symbol class            " => Symbol "

Symbols are commonly used to dynamically send messages to (call methods on) objects:

" same as 'foo' at: 2 "
'foo' perform: #at: with: 2 " => $o "

References

[edit]
  1. ^ a b c Thomas, Dave; Fowler, Chad; Hunt, Andy (2001). Programming Ruby the pragmatic programmers' guide; [includes Ruby 1.8] (2nd, 10 print. ed.). Raleigh, North Carolina: The Pragmatic Bookshelf. ISBN 978-0-9745140-5-5.
  • ^ Symbols on the page on Data Structures
  • ^ Keywords on the page on Data Structures
  • ^ "A tour of the Dart language | Symbols". Dart programming language. Retrieved 17 January 2021.
  • ^ "Julia Core.Symbol". Julia Documentation. Retrieved 31 May 2022.
  • ^ "CLHS: System Class SYMBOL". www.lispworks.com.
  • ^ "CLHS: System Class PACKAGE". www.lispworks.com.
  • ^ Peter Norvig: Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp, Morgan Kaufmann, 1991, ISBN 1-55860-191-0, Web
  • ^ Bratko, Ivan (2001). Prolog programming for artificial intelligence. Harlow, England; New York: Addison Wesley. ISBN 978-0-201-40375-6.
  • ^ a b Kidd, Eric (20 January 2007). "13 Ways of Looking at a Ruby Symbol". Random Hacks. Retrieved 10 July 2011.
  • ^ "Programming Ruby: The Pragmatic Programmer's Guide". ruby-doc.com.
  • ^ "Using Symbols for the Wrong Reason". Gnomic Notes.
  • ^ "Symbol". Ruby Documentation. Retrieved 10 July 2011.
  • ^ http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf ANSI Smalltalk standard.

  • Retrieved from "https://en.wikipedia.org/w/index.php?title=Symbol_(programming)&oldid=1235321541"

    Category: 
    Programming constructs
    Hidden categories: 
    Wikipedia articles needing context from October 2023
    Articles with short description
    Short description matches Wikidata
    Dynamic lists
    Articles with example Ruby code
     



    This page was last edited on 18 July 2024, at 18:21 (UTC).

    Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



    Privacy policy

    About Wikipedia

    Disclaimers

    Contact Wikipedia

    Code of Conduct

    Developers

    Statistics

    Cookie statement

    Mobile view



    Wikimedia Foundation
    Powered by MediaWiki