Function SET-MACRO-CHARACTER, GET-MACRO-CHARACTER
get-macro-character char &optional readtable => function, non-terminating-p
set-macro-character char new-function &optional non-terminating-p readtable => t
char - 文字
non-terminating-p - generalized-boolean。デフォルトはfalse。
readtable - readtable指定子。デフォルトは現在のreadtable。
function - nilか、2つの引数の関数指定子
new-function - 関数指定子
get-macro-characterの第一返却値functionは、 readtable内にあるcharに関連したリーダーマクロ関数を (もしあるなら)返却するか、 あるいはcharがreadtableにおいてマクロ文字ではないときは nilを返却します。 第二返却値non-terminating-pは、 charが非終端マクロ文字のときはtrueを、 それ以外のときはfalseを返却します。
set-macro-characterは、 readtable内において リーダーマクロ関数であるnew-function (またはnew-functionの指定子)を charのマクロ文字として関連付けます。 もしnon-terminating-pがtrueのとき、 charは非終端マクロ文字になり、 それ以外のときは終端マクロ文字になります。
(get-macro-character #\{) => NIL, false
(not (get-macro-character #\;)) => false下記の例は、標準構文のシングルクォート・リードマクロの定義を示したものです。
(defun single-quote-reader (stream char)
(declare (ignore char))
(list 'quote (read stream t nil t))) => SINGLE-QUOTE-READER
(set-macro-character #\' #'single-quote-reader) => Tここでのsingle-quote-readerは、 シングルクォートに続くオブジェクトを読み込み、 quoteとそのオブジェクトのリストを返却するものです。 引数のcharは無視されます。
下記の例は、標準構文のセミコロン・リードマクロの定義を示したものです。
(defun semicolon-reader (stream char)
(declare (ignore char))
;; 最初に現在の入力の行全体を飲み込みます。
;; コメントがend-of-fileで終端するのは許容します。
(do () ((char= (read-char stream nil #\Newline t) #\Newline)))
;; 0個の値を返却します。
(values)) => SEMICOLON-READER
(set-macro-character #\; #'semicolon-reader) => Treadtableは変更されます。
なし。
なし。
なし。