srfi.239
- リストの分解 ¶このモジュールは、リスト処理のコードで頻繁に現れるパターンに特化した
パターンマッチングの機能を提供します。
Gauche用のコードを書いているなら、機能としてはGaucheのmatch
のサブセットになるので
このモジュールを使う必要はありません(util.match
- パターンマッチング参照)が、
ポータブルなコードを書いている時は有用でしょう。
[SRFI-239]{srfi.239
}
各clauseは以下のいずれかの形をとります。
((var1 . var2) body …)
(() body …)
(var body …)
ここで、var、var1、var2は識別子です。 clauseは順不同で、3つ全てが揃っていなくても構いません。
まずexprが評価されます。それがペアなら、最初の形式の節が選択され、 var1がペアのcarに、var2がcdrに束縛された環境でbody …が 評価されます。 exprの値が空リストなら2番めの形式の節が選択され、 body …が評価されます。 それ以外の場合は3番めの形式の節が選択され、 exprの値がvarに束縛された環境で body …が評価されます。
var、var1、var2に_
が使われた場合、
該当する値は束縛されず捨てられます。
3つ全ての節が揃っていなくて、exprの結果にマッチする節がなければ、
エラーが報告されます。
match
と違い、最初の形式の節が指定されていない場合に、
ペアは3番めの形式の節とはマッチしません。