#lang scribble/doc @(require "mz.ss") @title[#:style 'toc #:tag "data"]{Datatypes} Each pre-defined datatype comes with a set of procedures for manipulating instances of the datatype. @local-table-of-contents[#:style 'immediate-only] @; ------------------------------------------------------------ @include-section["booleans.scrbl"] @; ------------------------------------------------------------ @include-section["numbers.scrbl"] @; ------------------------------------------------------------ @include-section["strings.scrbl"] @; ------------------------------------------------------------ @include-section["bytes.scrbl"] @; ------------------------------------------------------------ @include-section["chars.scrbl"] @; ------------------------------------------------------------ @section[#:tag "symbols"]{Symbols} @guideintro["symbols"]{symbols} @section-index["symbols" "generating"] @section-index["symbols" "unique"] A @deftech{symbol} is like an immutable string, but symbols are normally @deftech{interned}, so that two symbols with the same character content are normally @scheme[eq?]. All symbols produced by the default reader (see @secref["parse-symbol"]) are interned. The two procedures @scheme[string->uninterned-symbol] and @scheme[gensym] generate @deftech{uninterned} symbols, i.e., symbols that are not @scheme[eq?], @scheme[eqv?], or @scheme[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 @scheme[eq?], @scheme[eqv?], or @scheme[equal?] test, but a symbol may disappear when placed into a weak box (see @secref["weakbox"]) used as the key in a weak @tech{hash table} (see @secref["hashtables"]), or used as an ephemeron key (see @secref["ephemerons"]). @defproc[(symbol? [v any/c]) boolean?]{Returns @scheme[#t] if @scheme[v] is a symbol, @scheme[#f] otherwise.} @examples[(symbol? 'Apple) (symbol? 10)] @defproc[(symbol->string [sym symbol?]) symbol?]{Returns a freshly allocated mutable string whose characters are the same as in @scheme[sym].} @examples[(symbol->string 'Apple)] @defproc[(string->symbol [str string?]) symbol?]{Returns an @tech{interned} symbol whose characters are the same as in @scheme[str].} @examples[(string->symbol "Apple") (string->symbol "1")] @defproc[(string->uninterned-symbol [str string?]) symbol?]{Like @scheme[(string->symbol str)], but the resulting symbol is a new @tech{uninterned} symbol. Calling @scheme[string->uninterned-symbol] twice with the same @scheme[str] returns two distinct symbols.} @examples[(string->uninterned-symbol "Apple") (eq? 'a (string->uninterned-symbol "a"))] @defproc[(gensym [base (or/c string? symbol?) "g"]) symbol?]{Returns a new @tech{uninterned} symbol with an automatically-generated name. The optional @scheme[base] argument is a prefix symbol or string.} @examples[(gensym "apple")] @; ------------------------------------------------------------ @include-section["regexps.scrbl"] @; ------------------------------------------------------------ @section[#:tag "keywords"]{Keywords} @guideintro["keywords"]{keywords} A @deftech{keyword} is like an @tech{interned} symbol, but its printed form starts with @litchar{#:}, and a keyword cannot be used as an identifier. Furthermore, a keyword by itself is not a valid expression, though a keyword can be @scheme[quote]d to form an expression that produces the symbol. Two keywords are @scheme[eq?] if and only if they print the same. Like symbols, keywords are only weakly held by the internal keyword table; see @secref["symbols"] for more information. @defproc[(keyword? [v any/c]) boolean?]{ Returns @scheme[#t] if @scheme[v] is a keyword, @scheme[#f] otherwise.} @defproc[(keyword->string [keyword keyword?]) string?]{ Returns a string for the @scheme[display]ed form of @scheme[keyword], not including the leading @litchar{#:}.} @defproc[(string->keyword [str string?]) keyword]{ Returns a keyword whose @scheme[display]ed form is the same as that of @scheme[str], but with a leading @litchar{#:}.} @defproc[(keywordstring] and @scheme[string