パターンマッチング
パターンマッチング(英: Pattern matching、パターン照合)とは、データを検索する場合に、特定のパターンが出現するかどうか、またどこに出現するかを特定する手法のことである。
文字列のパターンマッチングには、固定されたパターンの検索ではKMP法やBM法など各種の文字列探索アルゴリズムがある。また正規表現を利用する手法も多数提案されている。
画像や動画に対するパターンマッチングの研究も行われている。だが、パターンマッチングはあらかじめ人が打っておかなくてはいけないため人工知能とは別で機械が自分で考えているわけではない(そもそも「考える」ということを形式的に定義することは不可能なので、この段落の後半の「だが、」以降は、単にどこかの誰かの考える「人工知能」という語に関する主観の表明に過ぎず、意味があることを何も述べてはいない)。
いくつかの高水準プログラミング言語には、多分岐の一種で、場合分けと同時に構成要素の取り出しのできる言語機能があり、パターンマッチと呼ばれている。Haskellでの例を示す。
listSumCase lst =
case lst of
[] -> 0
(x : xs) -> x + listSumCase xs
listSumPtn [] = 0
listSumPtn (x : xs) = x + listSumPtn xs
なお、この例の listSumCase
は expression style、listSumPtn
は declaration style である[1]。
歴史編集
パターンマッチング構造を備えた初期のプログラミング言語には、COMIT (1957)、SNOBOL (1962)、Refal (1968)、ツリーベースのパターンマッチング、Prolog (1972)、 SASL (1976)、NPL (1977)、およびKRC (1981)がある。
多くのテキストエディタはさまざまな種類のパターンマッチングをサポートしている。QEDエディタは正規表現検索をサポートし、一部のバージョンのTECOでは、検索でOR演算子をサポートしている。
数式処理システムは通常、代数式のパターンマッチングをサポートしている。[2]
注編集
- ^ https://wiki.haskell.org/Declaration_vs._expression_style
- ^ Joel Moses, "Symbolic Integration", MIT Project MAC MAC-TR-47, December 1967
参考文献編集
- 『Analytic Pattern Matching: From DNA to Twitter』 Philippe Jacquet・Wojciech Szpankowski、Cambridge University Press、2015年、ISBN 9780521876087