Haskell プログラム集


何か実用的なプログラム

Haskell で何か実用的なプログラムを作ってみたいと思ったので、尿中の塩分とクレアチニン濃度から、一日の塩分摂取量を推定するプログラムを作ってみた。

一日塩分摂取量計算プログラム

nacl (尿中Na濃度) (尿中クレアチニン濃度) (年齢) (体重) (身長) とコマンドプロンプトから入力すると、一日に摂取した食塩量の推定値を表示してくれる。

ファイル名: nacl.hs

module Main where

import System.Environment (getArgs)
import System.Exit (exitFailure)
import System.IO (hPutStrLn, stderr)

main :: IO ()
main = do
  args <- getArgs
  if (length args /= 5)
    then do hPutStrLn stderr "Error: Arguments mismatch"
            exitFailure
    else print $ nacl' $ map (\x -> read x :: Double) args

nacl' :: [Double] -> Double
nacl' xs = nacl (xs !! 0) (xs !! 1) (xs !! 2) (xs !! 3) (xs !! 4)

nacl :: Double -> Double -> Double -> Double -> Double -> Double
nacl nas crs age weight height = na24 * 0.0585
  where
    na24 = (21.98 * (nas / crs) * prUcr24) ** 0.392
    prUcr24 = (-2.04) * age + 14.89 * weight + 16.14 * height - 2244.45

実行例

>ghc nacl.hs -o nacl.exe
>nacl 100 212 57 58 158
2.2392397790846954

ロジックそのものよりエラー処理や、コマンドライン引数の受け取り方などの IO 周りの処理が面倒だった。どんなプログラム言語で書いても一緒なのだけれど。自分だけしか使わないのなら、interact を使ってフィルターにしてしまうのが一番簡単だ。