# Non standard read syntax

## Multiline Block Comment

    #| ... |#

A multiline block comment. May be nested. Implements SRFI-30

## Expression Comment

    #;EXPRESSION

Treats `EXPRESSION` as a comment.

## External Representation

    #,(CONSTRUCTORNAME DATUM ...)

Allows user-defined extension of external representations. (For more information see the documentation for SRFI-10)

## Syntax Expression

    #'EXPRESSION

An abbreviation for `(syntax EXPRESSION)`.

## Location Expression

    #$EXPRESSION

An abbreviation for `(location EXPRESSION)`.

## Keyword

    #:SYMBOL

Syntax for keywords. Keywords are symbols that evaluate to themselves, and as such don't have to be quoted.

## Multiline String Constant

    #<<TAG

Specifies a multiline string constant. Anything up to a line equal to `TAG` (or end of file) will be returned as a single string:

    (define msg #<<END
     "Hello, world!", she said.
    END
    )

is equivalent to

    (define msg "\"Hello, world!\", she said.")

## Multiline String Constant with Embedded Expressions

    #<#TAG

Similar to `#<<`, but allows substitution of embedded Scheme expressions prefixed with `#` and optionally enclosed in curly brackets. Two consecutive `#`s are translated to a single `#`:

    (define three 3)
    (display #<#EOF
    This is a simple string with an embedded `##' character
    and substituted expressions: (+ three 99) ==> #(+ three 99)
    (three is "#{three}")
    EOF
    )

prints

    This is a simple string with an embedded `#' character
    and substituted expressions: (+ three 99) ==> 102
    (three is "3")

## Foreign Declare

    #> ... <#

Abbreviation for `foreign-declare " ... ")`.

## Sharp Prefixed Symbol

    #%...

Reads like a normal symbol.

## Bang

    #!...

Interpretation depends on the directly following characters. Only the following are recognized. Any other case results in a read error.

### Line Comment

- If followed by whitespace or a slash, then everything up the end of the current line is ignored

### Eof Object

- If followed by the character sequence `eof`, then the (self-evaluating) end-of-file object is returned

### DSSSL Formal Parameter List Annotation

- If followed by any of the character sequences `optional`, `rest` or `key`, then a symbol with the same name (and prefixed with `#!`) is returned

### Read Mark Invocation

- If a read mark with the same name as the token is registered, then its procedure is called and the result of the read-mark procedure will be returned

## Case Sensitive Expression

    #cs...

Read the next expression in case-sensitive mode (regardless of the current global setting).

## Case Insensitive Expression

    #ci...

Read the next expression in case-insensitive mode (regardless of the current global setting).

## Conditional Expansion

    #+FEATURE EXPR

Equivalent to

    (cond-expand (FEATURE EXPR) (else))

Previous: Extensions to the standard

Next: Non standard macros and special forms