ToC DocOverview CGDoc RelNotes Index PermutedIndex
Allegro CL
Home Previous Up Next Table of Contents Index
  ANSI Common Lisp   23 Reader   23.2 Dictionary of Reader

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

Syntax:
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 Section 2.1.4.4 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:
Section 2.1.4.4 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.

Allegro CL Implementation Details:
None.

Home Previous Up Next Table of Contents Index
© Franz Inc. 1998-2005 - File last updated 6-21-2002