Scalaの総数を取得する再帰呼び出し
関数型言語では宣言的な関数を用いることが推奨されるのでループで++みたいな手続きをそのまま書くのはノットソークールだと。慣れたら再帰で書くほうが直感的になる感、チョットわかった。
def sumList(list:List[Int]): Int = { list match { case Nil => 0 case x::list => x + sumList(list) } }
これが全然理解できなかったんですよ。特にここが。
case x::list => x + sumList(list)
この再帰を抜けるためにはsumlistで指定されたリストがNilになるしかない。つまり、再帰で呼び出される度にtailし続けなくてはいけない。それがなんで「x::list」で出来るのか、全然理解できなかった。
聞くは一時の恥、聞かぬは一生の恥。stackoverflowを使わせて頂きました。
頂いた回答のコードを乗せます。おかげでバシッと理解できた。
def sumList(list:List[Int]): Int = { list match { case Nil => 0 case head::tail => { head + sumList(tail) } } }
うおおおおおおおおおおお! Consクラスにlistをパターンマッチして、展開しているってことか!!!!
Consクラスは (head:A,tail:List[A])という形で構成されているクラスで、headとtailに分割することが出来る。headとtailに分けてtailを再帰呼び出ししているのだから、再帰呼び出しする毎にtailされ続け、最後は空っぽになるわけだ〜
ご回答いただいた方に感謝します。やっと理解出来ました。