% Function SET-DISPATCH-MACRO-CHARACTER, GET-DISPATCH-MACRO-CHARACTER
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
を使用して、
ディスパッチ文字のセットアップを行う必要があります。