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|) => T (
2.1.4.4. マクロ文字
readtableは変更されます。
両関数において、disp-charが readtable内でディスパッチマクロ文字ではないとき エラーが発生します。
それらのsub-charを指定する前に make-dispatch-macro-character
を使用して、 ディスパッチ文字のセットアップを行う必要があります。