Previous: scheme lex datum bytevectors, Up: scheme lex datum [Index]
'<datum> `<datum> ,<datum> ,@<datum> #'<datum> #`<datum> #,<datum> #,@<datum>
Each of these is an abbreviation:
'<datum>
for (quote <datum>)
,
`<datum>
for (quasiquote <datum>)
,
,<datum>
for (unquote <datum>)
,
,@<datum>
for (unquote-splicing <datum>)
,
#'<datum>
for (syntax <datum>)
,
#`<datum>
for (quasisyntax <datum>)
,
#,<datum>
for (unsyntax <datum>)
, and
#,@<datum>
for (unsyntax-splicing <datum>)
.
Notice that it is the source code reader (the lexer and parser) which builds the symbolic expression:
(quote (a b c))
from the sequence of characters:
'(a b c)
and this happens before any library is loaded, so the source code
expander only sees the symbolic expression with the quote
symbol
in it. So, while the following program works because the library
(rnrs)
exports the quote
identifier:
#!r6rs (import (rnrs)) (write '(a b c))
the following program will fail:
#!r6rs (import (except (rnrs) quote)) (write '(a b c))
in exactly the same way the following program will fail:
#!r6rs (import (except (rnrs) quote)) (write (quote (a b c)))
because we have explicitly excluded quote
from the import set.
The same happens with syntax
and the other abbreviations.
Summary: once our eyes have adapted to use the abbreviations, and it may
take a while, they are of friendly usage; but we have to remember to
import libraries exporting quote
, syntax
and the other
abbreviated identifiers.