Scheme どう書く?的をScalaで書いてみた
Scheme どう書く?的 - higepon blogより
整列済みの number のリストがある。
'(1 3 4 5 6 12 13 15)
このようなリストで数が連続している部分は '(1 2 3) -> '(1 . 3) のように両端のみを書くような記法を導入する。
最初の例のリストであれば以下のようになる。
'(1 (3 . 6) (12 . 13) 15)
このようなリストの変換をするコードを書きたい。
ソース
case class R(s: Int,e: Int) case class N(n: Int) extends R(n,n) def f( input: List[R] ): List[R] = input match { case R(c1,c2)::N(c3)::cdr if(c2+1==c3) => f(R(c1,c3)::cdr) case car::cdr => car::f(cdr) case r => r } println(f((1::3::4::5::6::12::13::15::Nil)map(N(_))))
実行結果
List(N(1), R(3,6), R(12,13), N(15))
クラスと関数型の出会いに万歳!