User Tools


Function SET-DISPATCH-MACRO-CHARACTER, GET-DISPATCH-MACRO-CHARACTER

Syntax

  • get-dispatch-macro-character disp-char sub-char &optional readtablefunction
  • set-dispatch-macro-character disp-char sub-char new-function &optional readtablet

Arguments and Values

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 {\secref\MacroChars}.

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))) (setf n 0)) (setf 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 was read 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

Affected By

Side Effects

The readtable is modified.

Exceptional Situations

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

See Also

Notes

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

\issue{GET-MACRO-CHARACTER-READTABLE:NIL-STANDARD}