人気ブログランキング | 話題のタグを見る

手続き型プログラムみたいな Haskell プログラム

for 文と map 関数の関係が見えてきたので、手続き型プログラム風にリストのデータの基本統計の分散量を求めるプログラムを書いてみた。

variance :: [Float] -> Float
variance xs =
    let
        n = fromIntegral $ length xs
        mean = (sum xs) / n
        var = (sum $ map (\x -> (x-mean)*(x-mean)) xs) / n
    in
        var

map 関数や sum 関数が for ループを表していると考えて良い。発想的にも手続き型プログラムとそう変わったものでもないが、for ループが隠蔽されているぶんスッキリしているように見える。変数への代入(束縛)も手続き型言語風といってもいいくらいわかりやすいプログラムになった。

手続き型プログラムと Haskell の距離はそう遠くないのかもしれない。

実行例は次のようになった。

*Main> variance [1.2, 2.5, 3.4]
0.8155556


by tnomura9 | 2018-10-25 22:41 | Haskell | Comments(0)
<< foldr1 for 文と map 関数 >>