Function SET-DISPATCH-MACRO-CHARACTER, GET-DISPATCH-MACRO-CHARACTER
get-dispatch-macro-character disp-char sub-char &optional readtable => function
set-dispatch-macro-character disp-char sub-char new-function &optional readtable => t
disp-char - 文字
sub-char - 文字
readtable - readtable指定子。デフォルトは現在のreadtable。
function - 関数指定子か、nil
new-function - 関数指定子
set-dispatch-macro-characterは、 disp-charに続きsub-charが読み込まれたときに、 new-functionを呼び出すよう設定します もしsub-charが小文字のときは、 それは同等の大文字に変換されます。 もしsub-charが10進数の数字であったときはエラーです。
set-dispatch-macro-characterは、 特定のディスパッチマクロ文字のペアが読み込まれたときに、 new-functionが呼び出される機能を導入します。 new-functionはreadtableが使用されているときに disp-charに続いてsub-charが続くときに そのディスパッチ関数が呼び出されるように導入されます。
new-functionがどのように起動されるかについて より多くの情報は2.1.4.4. マクロ文字をご確認ください。
get-dispatch-macro-characterは、 readtable内においてdisp-charとsub-charに関連づいた ディスパッチ関数を検索します。
get-dispatch-macro-characterは disp-char配下のsub-charに対応する マクロ文字関数を返却するか、 あるいはsub-charに関連した関数が存在しなかったときは nilを返却します。 もしsub-charが10進数の数字のとき、 get-dispatch-macro-characterは nilを返却します。
(get-dispatch-macro-character #\# #\{) =>  NIL
(set-dispatch-macro-character #\# #\{        ;#{の割り当て
   #'(lambda(s c n)
       (let ((list (read s nil (values) t)))  ;listは#n{の後のオブジェクトで
         (when (consp list)                   ;listのnthの要素を返却
           (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もし#$fooを(dollar foo)としたい場合
(defun |#$-reader| (stream subchar arg)
   (declare (ignore subchar arg))
   (list 'dollars (read stream t nil t))) =>  |#$-reader|
(set-dispatch-macro-character #\# #\$ #'|#$-reader|) =>  T2.1.4.4. マクロ文字
readtableは変更されます。
両関数において、disp-charが readtable内でディスパッチマクロ文字ではないとき エラーが発生します。
それらのsub-charを指定する前に make-dispatch-macro-characterを使用して、 ディスパッチ文字のセットアップを行う必要があります。