A keyword value is similar to a symbol (see Symbols), but its printed form is prefixed with #:.
+Reading Keywords in The Racket Reference documents the fine points of the syntax of keywords.
'#:apple
> '#:apple'#: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:
> not-a-symbol-expressionnot-a-symbol-expression: undefined;
cannot reference an identifier before its definition
in module: top-level
> #:not-a-keyword-expressioneval:2:0: #%datum: keyword misused as an expression
at: #:not-a-keyword-expression
Despite their similarities, keywords are used in a different way than identifiers or symbols. Keywords are intended for use (unquoted) as special markers in argument lists and in certain syntactic forms. For run-time flags and enumerations, use symbols instead of keywords. The example below illustrates the distinct roles of keywords and symbols.
;optional #:mode argument can be 'text or 'binary#:mode'text;optional #:exists argument can be 'replace, 'truncate, ...#:exists'truncate)