2015年5月21日木曜日

scala関数型デザイン&プログラミング P68

Exercise 4.2 flatMapをベースにしてvariance関数を実装せよ。math.pow(x-m,2)の平均が分散
def mean(xs:Seq[Double]):Option[Double]=
 if (xs.isEmpty) None
 else Some(xs.sum/xs.length)
を使うようだ。

meanのことを忘れていたし、まったく思いつかなかったので、正解を見たら
    def variance(xs:Seq[Double]):Option[Double]=
 mean(xs).flatMap(m=>mean(xs.map( x=>math.pow(x-m,2))))
となっている。たったこれだけの文字数ですむとは驚きだ。ためしに
def variance(xs:Seq[Double]):Option[Double]=
 mean(xs).flatMap(m=>mean(map(xs)(x=>math.pow(x-m,2))))
とすると、うまくいかなかった。Listのmapの仕様とはちがっている?ようだ。

0 件のコメント:

コメントを投稿