リーダーマクロを定義する:一行コメント型 - lisp-cookbook-ja/common-lisp GitHub Wiki
標準のリーダーマクロである「;」と同じタイプの例です。
(defun read-comment (stream ignore)
(declare (ignore ignore))
;; 改行かend-of-fileに遭遇するまで読み捨て
(do ((char (read-char stream nil :eof) (read-char stream nil :eof)))
((or (eq char :eof) (char= char #\newline))) )
(values))
リーダーがマクロ文字に遭遇すると、その文字から改行までを読み捨て、何も値は返しません
(let ((*readtable* (copy-readtable nil))) ;新しい標準のリードテーブル
(set-macro-character #\% #'read-comment) ;%から改行までを読み捨て
(with-input-from-string (in
"
% コメント
% コメント
% コメント
'foo"
)
(read in)))
;=> 'FOO