無名関数での複数パターンマッチ

できる言語

MLでは以下のように、無名関数の定義時に|で区切って複数のケースのパターンマッチが書ける
http://www.geocities.jp/m_hiroi/func/smlnj05.html

fn pat1 => expr1 | pat2 => expr2 | ... | patN => exprN

OCamlでは以下のように書ける
http://www.geocities.jp/m_hiroi/func/ocaml04.html

function pat1 -> expr1 | pat2 -> expr2 | ... | patN -> exprN

Scalaでは以下のように書ける
http://rainyday.blog.so-net.ne.jp/2007-01-01

{ case pat1 => expr1 case pat2 => expr2 ... case patN => exprN }

Erlangでは以下のように書ける
http://www.kmonos.net/alang/etc/erlang.php#function

fun (pat1) -> expr1 ; (pat2) -> expr2 ; ... ; (patN) -> exprN end

Gaucheでは以下のように書ける
http://practical-scheme.net/gauche/man/gauche-refj_163.html

(match-lambda* (pat1 expr1) (pat2 expr2) ... (patN exprN))

できない言語

Haskellで以下のように書いてもエラーになってしまう

\ { pat1 -> expr1 ; pat2 -> expr2 ; ... ; patN -> exprN }

Cleanも規則代替部は書けないようだ。

Clean Version 2.0 言語報告 【第3章】
3.4.1 ラムダ抽象
しかし、この方法では、シンプルな関数しか定義できない。つまり、ガード、規則代替部と局所定義はない。

http://sky.zero.ad.jp/~zaa54437/programming/clean/LanguageReport21/Chap3.html