Common Lisp でのリーダーマクロの興味深い利用例の紹介を見た。
プログラミング言語 Scheme は LISP 系言語といえども Common Lisp でいうところのリーダーマクロに相当するものはない。 しかし、いくつかの短縮記法は提供されていて、読み込みの段階で対応する名前に変換される。 R5RS や R7RS では以下のよっつがそうだ。
短縮記法 | 対応する名前 |
---|---|
' | quote |
` | quasiquote |
, | unquote |
,@ | unquote-splicing |
それに加えて R6RS では以下の短縮記法も用意されている。
短縮記法 | 対応する名前 |
---|---|
#' | syntax |
#` | quasisyntax |
#, | unsyntax |
#,@ | unsyntax-splicing |
これらは単なる短縮記法であるので、たとえば quote
の意味を置換えてしまえば '
の意味も変えられる。 新しい記法を追加することは出来なくても、既存の記法の意味を変えることは出来るのだ。
私は以前に quasisyntax
を置換える試みをしたことがある。
使いどころを慎重に考えないと混乱の元になりそうだが、コードゴルフくらいには使えるかもしれない。
Document ID: 2882acdda16167cb2246cea8dd2b1ed0