プログラマ的京都生活

2013年04月23日

[]再帰

Scalaの勉強を再開した。

Ninety-Nine Scala Problems

とりあえず今日は第一問目。

scala> last(List(1, 1, 2, 3, 5, 8))
res0: Int = 8

こんな関数lastを作りなさい、と。

で、作ったのはこれ。

def last[T](ls:List[T]):T = {
  l(ls.size - 1)
}

答えはコレだった。

def last[T](ls:List[T]):T = ls match {
  case h::Nil => h
  case _::tail => last(tail)
  case _ => throw new NoSuchElementException
}

あらら・・。

よく英語を読むと、Prologからの移植で、再帰の練習問題っぽい。なるほど。

Scalaのパターンマッチの柔軟さがよくわかって勉強になるけど、実際、どっちのスタイルで書くべきなんだろう。今回くらいの簡単なものなら上のほうが一見行数も少ないし(下同様にエラーチェックするともう一行追加しないといけないけど)良さそうに思えるものの、もう少し複雑な処理なら下のスタイルのほうがいい感じになるのかな。

もう少し経験を積む事が必要だ。

天才天才 2015/07/06 17:44 はよ更新しろや

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/mtoyoshi/20130423/1366722646
リンク元
Connection: close