util.match

唐突に scheme の match (パターンマッチ)に惚れた。これはまさにコンパイラとかインタプリタとか書くための機能だと思う。というより単に式変形のための便利機能ってことか。

例)S式の変換を考える。例として、(ret) は "ret void" に、(ret '(i32 8)) は "ret i32 8" に、(ret '(i32 8) '(i1 1)) は "ret i32 8, i1 1" に変換するプログラムを考える。
普通に場合分けをしてももちろんいいけど、割と面倒。

http://practical-scheme.net/gauche/man/gauche-refj_163.html#SEC445 を眺めるとまさにすばらしい let の例がある。