set-macro-character, get-macro-character (original) (raw)

ANSI Common Lisp 23 Reader 23.2 Dictionary of Reader

23.2.10 set-macro-character, get-macro-character Function

Syntax:

get-macro-character char &optional readtable function, non-terminating-p

set-macro-character char new-function &optional non-terminating-p readtable t

Arguments and Values:

char - a character.

non-terminating-p - a generalized boolean. The default is false.

readtable - a readtable designator. The default is the current readtable.

function - nil, or a designator for a function of two arguments.

new-function - a function designator.

Description:

get-macro-character returns as its primary value, function, the reader macro function associated with char in readtable (if any), or else nil if char is not a macro character in readtable. The secondary value, non-terminating-p, is _true_if char is a non-terminating macro character; otherwise, it is false.

set-macro-character causes char to be a _macro character_associated with the reader macro function new-function(or the designator for new-function) in readtable. If non-terminating-p is true,char becomes a non-terminating macro character; otherwise it becomes a terminating macro character.

Examples:

(get-macro-character #{) NIL, false (not (get-macro-character #;)) false

The following is a possible definition for the single-quote _reader macro_in standard syntax:

(defun single-quote-reader (stream char) (declare (ignore char)) (list 'quote (read stream t nil t))) SINGLE-QUOTE-READER (set-macro-character #' #'single-quote-reader) T

Here single-quote-reader reads an object following the _single-quote_and returns a list of quote and that object. The char argument is ignored.

The following is a possible definition for the semicolon _reader macro_in standard syntax:

(defun semicolon-reader (stream char) (declare (ignore char)) ;; First swallow the rest of the current input line. ;; End-of-file is acceptable for terminating the comment. (do () ((char= (read-char stream nil #\Newline t) #\Newline))) ;; Return zero values. (values)) SEMICOLON-READER (set-macro-character #; #'semicolon-reader) T

Side Effects:

The readtable is modified.

See Also:

*readtable*

Allegro CL Implementation Details:

None.