3.7 Keywords
A keyword value is similar to a symbol (see Symbols), but its printed form is prefixed with #:.
Reading Keywords in PLT Scheme Reference documents the fine points of the syntax of keywords.
Examples: |
> (string->keyword "apple") |
#:apple |
> '#:apple |
#:apple |
> (eq? '#:apple (string->keyword "apple")) |
#t |
More precisely, a keyword is analogous to an identifier; in the same way that an identifier can be quoted to produce a symbol, a keyword can be quoted to produce a value. The same term “keyword” is used in both cases, but we sometimes use keyword value to refer more specifically to the result of a quote-keyword expression or of string->keyword. An unquoted keyword is not an expression, just as an unquoted identifier does not produce a symbol:
Examples: |
> not-a-symbol-expression |
reference to undefined identifier: not-a-symbol-expression |
> #:not-a-keyword-expression |
expand: a keyword is not an expression in: |
#:not-a-keyword-expression |
Despite their similarities, keywords are used in a different way than identifiers or symbols. Keywords are intented for use (unquoted) as special markers in argument lists and in certain syntactic forms.
Need some examples here, once we have more keyword-based procedures and syntax in place...
Keywords should not be used simply as another kind of symbol. Use symbols, instead of keywords, for run-time flags and enumerations.
Examples: |
> (bytes->path #"/usr/tmp" 'unix) ; 'unix, not '#:unix |
#<path:/usr/tmp> |