3.6 Symbols
Symbols in The Racket Guide 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.
The procedure string->unreadable-symbol returns an
unreadable symbol that is partially interned. The default
reader (see Reading Symbols) never produces a unreadable
symbol, but two calls to string->unreadable-symbol with
equal? strings produce eq? results. An unreadable
symbol can print the same as an interned or uninterned
symbol. Unreadable symbols are useful in expansion and
compilation to avoid collisions with symbols that appear in the
source; they are usually not generated directly, but they can appear
in the result of functions like identifier-binding.
Interned and unreadable 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).
Returns #t if v is
a symbol, #f otherwise.
Returns
#t if
sym is
interned,
#f otherwise.
Returns a freshly
allocated mutable string whose characters are the same as in
sym.
Returns an
interned symbol whose characters are the same as in
str.
Returns a
new
uninterned symbol with an automatically-generated name. The
optional
base argument is a prefix symbol or string.
Example: |
> (gensym "apple") | 'apple280667 |
|