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) => T (
readtableは変更されます。
なし。
なし。
なし。