Next: バッククォートスタイルパターン, Previous: pcaseマクロ, Up: パターンマッチングによる条件 [Contents][Index]
pcaseの拡張pcaseマクロは数種類のパターンをサポートします(パターンマッチングによる条件を参照)。pcase-defmacroを使用すれば違う種類のパターンにたいするサポートを追加できます。
(name actual-args)のように呼び出すために新たな種類のpcase用のパターンを定義する。pcaseマクロはbodyを評価する呼び出しへと展開する。このマクロの役割はargsをactual-argsにバインドした環境下において、呼び出されたパターンを別の何らかのパターンに書き換えることである。
さらにpcaseのドキュメント文字列とともにdocが表示されるように計らう。docでは慣例によりexpressionの評価結果を示すためにEXPVALを使用すること。
bodyは通常はより基本的なパターンを使用して呼び出されたパターンを書き換える。最終的にはすべてのパターンはコアパターンに絞り込まれるが、bodyがすぐにコアパターンを使用する必要はない。以下の例ではless-thanとinteger-less-thanという2つのパターンを定義している。
(pcase-defmacro less-than (n) "Matches if EXPVAL is a number less than N." `(pred (> ,n)))
(pcase-defmacro integer-less-than (n)
"Matches if EXPVAL is an integer less than N."
`(and (pred integerp)
(less-than ,n)))
args
(このケースではnの1つだけ)に言及するdocstringは通常の方法、EXPVALでは慣例にもとづく方法であることに注意してください。1つ目の書き換え(
less-thanのbody
)ではpredというコアパターンだけが使用されていて、2つ目では2つのコアパターンandとpredと新たに定義したパターンless-thanが使用されています。そしていずれの書き換えにおいてもシングルバッククォート構文が使用されています(バッククォートを参照)。