% Function SET-MACRO-CHARACTER, GET-MACRO-CHARACTER
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は変更されます。
なし。
なし。
なし。