# Symbols A _symbol_ is an atomic value that prints like an identifier preceded with `'`. An expression that starts with `'` and continues with an identifier produces a symbol value. Examples: ```racket > 'a 'a > (symbol? 'a) #t ``` For any sequence of characters, exactly one corresponding symbol is _interned_; calling the `string->symbol` procedure, or `read`ing a syntactic identifier, produces an interned symbol. Since interned symbols can be cheaply compared with `eq?` \(and thus `eqv?` or `equal?`\), they serve as a convenient values to use for tags and enumerations. Symbols are case-sensitive. By using a `#ci` prefix or in other ways, the reader can be made to case-fold character sequences to arrive at a symbol, but the reader preserves case by default. Examples: ```racket > (eq? 'a 'a) #t > (eq? 'a (string->symbol "a")) #t > (eq? 'a 'b) #f > (eq? 'a 'A) #f > #ci'A 'a ``` Any string \(i.e., any character sequence\) can be supplied to `string->symbol` to obtain the corresponding symbol. For reader input, any character can appear directly in an identifier, except for whitespace and the following special characters:    `(` `)` `[` `]` `{` `}` `"` `,` `'` ` `;` `#` `|` `\` Actually, `#` is disallowed only at the beginning of a symbol, and then only if not followed by `%`; otherwise, `#` is allowed, too. Also, `.` by itself is not a symbol. Whitespace or special characters can be included in an identifier by quoting them with `|` or `\`. These quoting mechanisms are used in the printed form of identifiers that contain special characters or that might otherwise look like numbers. Examples: ```racket > (string->symbol "one, two") '|one, two| > (string->symbol "6") '|6| ``` > +\[missing\] in \[missing\] documents the fine points of the syntax of > symbols. The `write` function prints a symbol without a `'` prefix. The `display` form of a symbol is the same as the corresponding string. Examples: ```racket > (write 'Apple) Apple > (display 'Apple) Apple > (write '|6|) |6| > (display '|6|) 6 ``` The `gensym` and `string->uninterned-symbol` procedures generate fresh _uninterned_ symbols that are not equal \(according to `eq?`\) to any previously interned or uninterned symbol. Uninterned symbols are useful as fresh tags that cannot be confused with any other value. Examples: ```racket > (define s (gensym)) > s 'g42 > (eq? s 'g42) #f > (eq? 'a (string->uninterned-symbol "a")) #f ``` > +\[missing\] in \[missing\] provides more on symbols.