set-dispatch-macro-character (ANSI and GNU Common Lisp Document)

Next: set-macro-character, Previous: readtablep, Up: Reader Dictionary

#### 23.2.9 set-dispatch-macro-character, get-dispatch-macro-character

[Function]

`get-dispatch-macro-character` disp-char sub-char &optional readtable ⇒ function

`set-dispatch-macro-character` disp-char sub-char new-function &optional readtable ⇒ t

#### Arguments and Values::

disp-char—a character.

sub-char—a character.

readtable—a readtable designator.

The default is the current readtable.

function—a function designator or nil.

new-function—a function designator.

#### Description::

set-dispatch-macro-character causes new-function to be called when disp-char followed by sub-char is read. If sub-char is a lowercase letter, it is converted to its uppercase equivalent. It is an error if sub-char is one of the ten decimal digits.

set-dispatch-macro-character installs a new-function to be called when a particular dispatching macro character pair is read. New-function is installed as the dispatch function to be called when readtable is in use and when disp-char is followed by sub-char.

For more information about how the new-function is invoked, see Macro Characters.

get-dispatch-macro-character retrieves the dispatch function associated with disp-char and sub-char in readtable.

get-dispatch-macro-character returns the macro-character function for sub-char under disp-char, or nil if there is no function associated with sub-char. If sub-char is a decimal digit, get-dispatch-macro-character returns nil.

#### Examples::

     (get-dispatch-macro-character #\# #\{) ⇒  NIL
     (set-dispatch-macro-character #\# #\{        ;dispatch on #{
        #'(lambda(s c n)
            (let ((list (read s nil (values) t)))  ;list is object after #n{
              (when (consp list)                   ;return nth element of list
                (unless (and n (< 0 n (length list))) (setq n 0))
                (setq list (nth n list)))
             list))) ⇒  T
     #{(1 2 3 4) ⇒  1
     #3{(0 1 2 3) ⇒  3
     #{123 ⇒  123

If it is desired that `#$foo` : as if it were `(dollars foo)`.

    (defun |#$-reader| (stream subchar arg)
       (declare (ignore subchar arg))
       (list 'dollars (read stream t nil t))) ⇒  |#$-reader|
     (set-dispatch-macro-character #\# #\$ #'|#$-reader|) ⇒  T

#### See Also::

Macro Characters

#### Side Effects::

The readtable is modified.

#### Affected By::

*readtable*.

#### Exceptional Situations::

For either function, an error is signaled if disp-char is not a dispatching macro character in readtable.

#### See Also::

readtable

#### Notes::

It is necessary to use make-dispatch-macro-character to set up the dispatch character before specifying its sub-characters.

Next: set-macro-character, Previous: readtablep, Up: Reader Dictionary