プログラミング「第7回オフラインリアルタイムどう書くの問題」を解いていて気がついたこと、学んだことを明日のじぶんのために、記録。2013.2.2いろいろ問題をコネているうちに、この問題はパタンマッチングで解けることに気がつきました。正確に言うと、最初にC++で解いたコードを読み直していて、パタンマッチングとバックトラッキングそのものだということに気がつきました。マッチングに失敗したら条件を替えてもう一度最初からマッチングを試みる、というバックトラッキング。以下、C++とPrologとHaskellでどうするか、整理してみたものです。設問まず、パタンマッチングの部分だけが見やすくなるように、「どう書く」の問題からいろいろ取り去ってより簡単な問題を作りました。要素を格納する順序付きのコンテナを考える。先頭の位置は0とする。コンテナ中にある指定された要素が3つ連続している場所がある場合、最初の3つ連続した要素の最初の要素の位置を返す。要素が3つ連続した場所がない場合、要素が2つ連続している最初の場所の最初の要素の位置を返す。要素が2つ連続した場所がない場合、最初の要素の位置を返す。要素がコンテナ中に見つからない場合、-1を返す。コンテナを文字列として、検索する要素を「A」とすると、次のようになります。