For Development HEAD DRAFTSearch (procedure/syntax/module):

11.67 srfi.239 - リストの分解

Module: srfi.239

このモジュールは、リスト処理のコードで頻繁に現れるパターンに特化した パターンマッチングの機能を提供します。 Gauche用のコードを書いているなら、機能としてはGaucheのmatchのサブセットになるので このモジュールを使う必要はありません(util.match - パターンマッチング参照)が、 ポータブルなコードを書いている時は有用でしょう。

Macro: list-case expr clause …

[SRFI-239]{srfi.239} 各clauseは以下のいずれかの形をとります。

  • ((var1 . var2) body …)
  • (() body …)
  • (var body …)

ここで、varvar1var2は識別子です。 clauseは順不同で、3つ全てが揃っていなくても構いません。

まずexprが評価されます。それがペアなら、最初の形式の節が選択され、 var1がペアのcarに、var2がcdrに束縛された環境でbody …が 評価されます。 exprの値が空リストなら2番めの形式の節が選択され、 body …が評価されます。 それ以外の場合は3番めの形式の節が選択され、 exprの値がvarに束縛された環境で body …が評価されます。

varvar1var2_が使われた場合、 該当する値は束縛されず捨てられます。

3つ全ての節が揃っていなくて、exprの結果にマッチする節がなければ、 エラーが報告されます。 matchと違い、最初の形式の節が指定されていない場合に、 ペアは3番めの形式の節とはマッチしません。



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT