引数がいくつあってもよい関数
f が平坦な関数でなければ,
のようなパターンは,引数を2つ持った同じ関数の例しか表さない.場合によっては,引数がいくつあってもよいとするパターンを設ける必要がある.
これを行うには,複数のブランク記号を使う.単一ブランクによるパターン,例えば,
は,1つのMathematica 式だけしか表せない.これに対して,
のような二重ブランクは,式がいくつあってもそれらをすべて表すことができる.

は,式の列

をすべて表す.
| Out[1]= |  |
もっと複雑な関数を定義する.この関数は,

の持つ重複成分をペアで抽出する.
| Out[3]= |  |
「二重ブランク」
は,1つもしくは複数の式からなる式の列を表す.「三重ブランク」
は,ゼロもしくはそれ以上の式からなる式の列を表す.ただし,三重ブランクをパターンに使うときは特に注意が必要である.無限ループに陥る危険性があるからである.例えば,
と定義したとする.ここで今,
をタイプすると,
がゼロ要素により列の要素に繰り返しマッチしてしまうことから,無限ループに陥ってしまう.このため,ゼロ要素のケースを含める必要がある場合を除いて,三重ブランクではなく二重ブランクを常に使うようにする.
| _ | 1つの式を表す |
| x_ | 1つの式を表し,参照名を x とする |
| __ | 1つ以上の式からなる式の列を表す |
| x__ | 1つ以上の式からなる式の列を表し,参照名を x とする |
| x__h | すべて h を頭部とした式である式の列を表す |
| ___ | ゼロ成分のケースも含める |
| x___ | 参照名を x とするゼロあるいは1つ以上の式からなる式の列を表す |
| x___h | すべての頭部が h であるゼロあるいは1つ以上の式を表す |
パターンオブジェクトの種類
「平坦な関数と順不同な関数」で触れたが,PlusやTimesのような平坦性の関数では,Mathematica は,引数がいくつあってもそれらを自動的に扱うことができる.このため,特別に二重ブランクや三重ブランクを使う必要はない.
多重ブランクを使うと,特定の式にマッチする組合せが複数生じることがよくある.Mathematica は,デフォルトで,最も短くなる引数の列を,パターンマッチングの最初の多重ブランクに割り当ててくれる組合せをまず試すようになっている.この順序は,パターンの部分をLongestかShortestでラップすることで変更することができる.
マッチが試される順序の制御
Mathematica が試す全組合せがリスト形式で列挙される.
| Out[4]= |  |
次で
Mathematica は最初に
x__ に対する最長マッチを試みるようになる.
| Out[5]= |  |
| Out[6]= |  |
このパターンを使うと,少なくとも1要素を持ったすべてのサブリストを列挙することができる.
| Out[7]= |  |
| Out[8]= |  |