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 件のコメント:
コメントを投稿