(guile.info.gz) Symbol Primitives
Info Catalog
(guile.info.gz) Symbol Variables
(guile.info.gz) Symbols
(guile.info.gz) Symbol Props
21.6.4 Operations Related to Symbols
------------------------------------
Given any Scheme value, you can determine whether it is a symbol using
the `symbol?' primitive:
-- Scheme Procedure: symbol? obj
-- C Function: scm_symbol_p (obj)
Return `#t' if OBJ is a symbol, otherwise return `#f'.
Once you know that you have a symbol, you can obtain its name as a
string by calling `symbol->string'. Note that Guile differs by default
from R5RS on the details of `symbol->string' as regards
case-sensitivity:
-- Scheme Procedure: symbol->string s
-- C Function: scm_symbol_to_string (s)
Return the name of symbol S as a string. By default, Guile reads
symbols case-sensitively, so the string returned will have the
same case variation as the sequence of characters that caused S to
be created.
If Guile is set to read symbols case-insensitively (as specified by
R5RS), and S comes into being as part of a literal expression
( Literal expressions (r5rs)Literal expressions.) or by a
call to the `read' or `string-ci->symbol' procedures, Guile
converts any alphabetic characters in the symbol's name to lower
case before creating the symbol object, so the string returned
here will be in lower case.
If S was created by `string->symbol', the case of characters in
the string returned will be the same as that in the string that was
passed to `string->symbol', regardless of Guile's case-sensitivity
setting at the time S was created.
It is an error to apply mutation procedures like `string-set!' to
strings returned by this procedure.
Most symbols are created by writing them literally in code. However
it is also possible to create symbols programmatically using the
following `string->symbol' and `string-ci->symbol' procedures:
-- Scheme Procedure: string->symbol string
-- C Function: scm_string_to_symbol (string)
Return the symbol whose name is STRING. This procedure can create
symbols with names containing special characters or letters in the
non-standard case, but it is usually a bad idea to create such
symbols because in some implementations of Scheme they cannot be
read as themselves.
-- Scheme Procedure: string-ci->symbol str
-- C Function: scm_string_ci_to_symbol (str)
Return the symbol whose name is STR. If Guile is currently
reading symbols case-insensitively, STR is converted to lowercase
before the returned symbol is looked up or created.
The following examples illustrate Guile's detailed behaviour as
regards the case-sensitivity of symbols:
(read-enable 'case-insensitive) ; R5RS compliant behaviour
(symbol->string 'flying-fish) => "flying-fish"
(symbol->string 'Martin) => "martin"
(symbol->string
(string->symbol "Malvina")) => "Malvina"
(eq? 'mISSISSIppi 'mississippi) => #t
(string->symbol "mISSISSIppi") => mISSISSIppi
(eq? 'bitBlt (string->symbol "bitBlt")) => #f
(eq? 'LolliPop
(string->symbol (symbol->string 'LolliPop))) => #t
(string=? "K. Harper, M.D."
(symbol->string
(string->symbol "K. Harper, M.D."))) => #t
(read-disable 'case-insensitive) ; Guile default behaviour
(symbol->string 'flying-fish) => "flying-fish"
(symbol->string 'Martin) => "Martin"
(symbol->string
(string->symbol "Malvina")) => "Malvina"
(eq? 'mISSISSIppi 'mississippi) => #f
(string->symbol "mISSISSIppi") => mISSISSIppi
(eq? 'bitBlt (string->symbol "bitBlt")) => #t
(eq? 'LolliPop
(string->symbol (symbol->string 'LolliPop))) => #t
(string=? "K. Harper, M.D."
(symbol->string
(string->symbol "K. Harper, M.D."))) => #t
Finally, some applications, especially those that generate new Scheme
code dynamically, need to generate symbols for use in the generated
code. The `gensym' primitive meets this need:
-- Scheme Procedure: gensym [prefix]
-- C Function: scm_gensym (prefix)
Create a new symbol with a name constructed from a prefix and a
counter value. The string PREFIX can be specified as an optional
argument. Default prefix is ` g'. The counter is increased by 1
at each call. There is no provision for resetting the counter.
The symbols generated by `gensym' are _likely_ to be unique, since
their names begin with a space and it is only otherwise possible to
generate such symbols if a programmer goes out of their way to do so.
The 1.8 release of Guile will include a way of creating symbols that
are _guaranteed_ to be unique.
Info Catalog
(guile.info.gz) Symbol Variables
(guile.info.gz) Symbols
(guile.info.gz) Symbol Props
automatically generated byinfo2html