A class for symbols.
|name|
¶[R7RS] Denotes a symbol that has weird name, including the characters that are not usually allowed in symbols. It can also include hex-escaped characters.
;; A symbol with spaces in its name '|this is a symbol| ⇒ |this is a symbol| ;; Unicode codepoint can be used following backslash-x escape, ;; and terminated by semicolon. '|\x3bb;| ⇒ λ
If the interpreter is running in case-insensitive mode, this syntax can be used to include uppercase characters in a symbol (see Case-sensitivity).
#:name
¶Denotes uninterned symbol. Uninterned symbols can be created
by gensym
or string->uninterned-symbol
.
Uninterned symbols are mainly for legacy macros to avoid
variable conflicts. They are not registered in the internal
dictionary, so such symbols with the same name can’t be eq?
.
(eq? '#:foo '#:foo) ⇒ #f (eq? '#:foo 'foo) ⇒ #f
To preserve eq?
-ness of uninterened symbols,
you need to use write-shared
which
shows shared structures.
(write-shared (let1 s '#:foo (list s s))) ⇒ prints (#0=#:foo #0#) (write-shared (let ((s '#:foo) (t '#:foo)) (list s t s t))) ⇒ prints (#0=#:foo #1=#:foo #0# #1#)
[R7RS base] Returns true if and only if obj is a symbol.
(symbol? 'abc) ⇒ #t (symbol? 0) ⇒ #f (symbol? 'i) ⇒ #t (symbol? '-i) ⇒ #f (symbol? '|-i|) ⇒ #t
[SRFI-258]
Returns #t
if symbol is an interned symbol,
#f
if it is an uninterned symbol. An error is signaled
if symbol is not a symbol.
This is included in SRFI-258 (see srfi.258
- Uninterned symbols).
[R7RS base]
Every argument must be a symbol. Returns #t
iff
every pair of arguments are eq?
to each other.
[R7RS base] Returns the name of symbol in a string. Returned string is immutable.
(symbol->string 'foo) ⇒ foo
[R7RS base] Returns a symbol whose name is a string string. String may contain weird characters.
(string->symbol "a") ⇒ a (string->symbol "A") ⇒ A (string->symbol "weird symbol name") ⇒ |weird symbol name|
[SRFI-258]
Like string->symbol
, but the created symbol is uninterned.
(string->uninterned-symbol "a") ⇒ #:a
This is included in SRFI-258 (see srfi.258
- Uninterned symbols).
Returns a fresh, uninterned symbol. The returned symbol can never
be eq?
to other symbol within the process.
If prefix is given, which must be a string, it is used
as a prefix of the name of the generated symbol. It is mainly for
the convenience of debugging.
This is similar to SRFI-258’s generate-uninterned-symbol
(see srfi.258
- Uninterned symbols).
Both symbol and prefix must be symbols.
If the name of prefix matches the beginning part of the
name of symbol, this procedure returns a symbol whose
name is the name of symbol without the matched prefix.
Otherwise, it returns #f
.
(symbol-sans-prefix 'foo:bar 'foo:) ⇒ bar (symbol-sans-prefix 'foo:bar 'baz:) ⇒ #f
Returns a symbol with the name which is a concatenation of string representation of objs.
If the first argument is a boolean, it is recognized as the first form; the first argument specifies whether the resulting symbol is interned or not.
Each other argument is converted to a string as follows:
If it is a keyword, its name (with the preceding :
) is used.
For all other objects, x->string
is used. (The special treatment
of keyword is to keep the consistency before and after
keyword-symbol integration. See Keyword and symbol integration, for
the details.)
This is upper-compatible to Bigloo’s same name procedure, which only allows symbols as the arguments and the result is always interned.
(symbol-append 'ab 'cd) ⇒ abcd (symbol-append 'ab ':c 30) ⇒ ab:c30 (symbol-append #f 'g 100) ⇒ #:g100