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パターンによるサブフィールド抽出。 |