On this page:
Version: 4.1

3.6 Symbols

Symbols in Guide: PLT Scheme introduces symbols.

A symbol is like an immutable string, but symbols are normally interned, so that two symbols with the same character content are normally eq?. All symbols produced by the default reader (see Reading Symbols) are interned.

The two procedures string->uninterned-symbol and gensym generate uninterned symbols, i.e., symbols that are not eq?, eqv?, or equal? to any other symbol, although they may print the same as other symbols.

Regular (interned) symbols are only weakly held by the internal symbol table. This weakness can never affect the result of an eq?, eqv?, or equal? test, but a symbol may disappear when placed into a weak box (see Weak Boxes) used as the key in a weak hash table (see Hash Tables), or used as an ephemeron key (see Ephemerons).

(symbol? v)  boolean?

  v : any/c

Returns #t if v is a symbol, #f otherwise.


  > (symbol? 'Apple)


  > (symbol? 10)


(symbol->string sym)  symbol?

  sym : symbol?

Returns a freshly allocated mutable string whose characters are the same as in sym.


  > (symbol->string 'Apple)


(string->symbol str)  symbol?

  str : string?

Returns an interned symbol whose characters are the same as in str.


  > (string->symbol "Apple")


  > (string->symbol "1")


(string->uninterned-symbol str)  symbol?

  str : string?

Like (string->symbol str), but the resulting symbol is a new uninterned symbol. Calling string->uninterned-symbol twice with the same str returns two distinct symbols.


  > (string->uninterned-symbol "Apple")


  > (eq? 'a (string->uninterned-symbol "a"))


(gensym [base])  symbol?

  base : (or/c string? symbol?) = "g"

Returns a new uninterned symbol with an automatically-generated name. The optional base argument is a prefix symbol or string.


  > (gensym "apple")