Next: Iteration, Previous: Combining Conditions, Up: Control Structures [Contents][Index]
4つの基本的な条件フォームとは別に、Emacs Lispにはcond
とcl-case
(Conditionals in Common Lisp
Extensionsを参照)の合成物とも言うべき、pcase
マクロというパターンマッチングによる条件フォームがあります。これはcond
とcl-case
の制限を克服して、パターンマッチングによるプログラミングスタイル(pattern
matching programming style)を導入するものです。そのpcase
が克服する制限とは:
cond
フォームはclauseそれぞれにたいして述語conditionを評価して候補から選択を行う(Conditionalsを参照)。condition内でのletバインドされた変数がclauseのbody-formsで利用できないのが主な制限。
もう1つの煩しい(制限というより不便な)点は一連のcondition述語が等価なテストを実装する際にはコードが多数回繰り返されること(cl-case
はこの不便さを解決している)。
cl-case
マクロは最初の引数と特定の値セットの等価性を評価することにより候補から選択を行う。
制限は2つ:
eql
を使用。
これらの制限は文字列や複合データ構造にたいしてcl-case
を不適格にする(このような制限はcond
にはないが上述のように別の制限をもつ)。
pcase
マクロはパターンマッチング(pattern
matching)の変種であるような等価性テストを汎化したものによるconditionの置き換え、clauseの述語を簡潔に表現できるような機能の追加、clauseの述語とbody-formsの間でletバインディングを共有するようなアレンジにより、概念的には最初の引数のフォーカスではcl-case
、clauseの処理フローではcond
を借用しています。
この述語の簡潔な表現はパターン(pattern)として知られています。最初の引数の値にたいして呼び出される述語が非nil
をリターンしたときには、“パターンが値にマッチした”といいます(“値がパターンにマッチした”ということもある)。
• The pcase macro: | 例と注意を含む。 | |
• Extending pcase : | 新種パターンの定義。 | |
• Backquote-Style Patterns: | 構造的パターンマッチング。 | |
• Destructuring with pcase Patterns: | pcaseパターンによるサブフィールド抽出。 |