中央値

Haskell で、リストの中央値を計算するプログラムを作ってみた。

import List

median :: [Double] -> Double
median xs
  | odd (length xs) = head (drop (length(xs) `div` 2) (sort xs))
  | otherwise =
    let rs = drop (length(xs) `div` 2 - 1) (sort xs)
    in (rs !! 0 + rs !! 1) / 2

実行例

Main> median [4,3,1,2]
2.5
Main> median [5,4,1,2,3]
3.0

なんということもない計算だが、Haskell でプログラムを作るのはパズルを解いているみたいで楽しい。

IOモナドを使わなければ、Haskell の使い方であまり悩むことはない。要するに、慣れの問題だ。

Haskell の潜在的可能性について言えば、通常のプログラム言語では数万行の音声認識のプログラムが、僅か260行程で記述できてしまった例もあるそうだ。IOモナドに嫌気をさして Haskell に手を出さないというのはもったいない気がする。
[PR]
by tnomura9 | 2011-05-31 16:20 | Haskell | Comments(0)
<< 自己適用 プログラムループ >>