手続き型言語のプログラム風に見える Haskell プログラムを書いてみた。簡単な統計量を計算するプログラムだ。(行頭のアンダースコアはスペースに置き換える。)順次実行するようなアルゴリズムは、IOモナドでない純粋関数のプログラムでも let ~ in 文を利用するとそれらしく書くことができる。 手続き型プログラム言語風のプログラムを書くということは、プログラムの文が順次実行されることが期待されることを示しており、見た目だけでなくアルゴリズム的にも意味がある。 なんということはないプログラムだが、これを知らないと Haskell を道具として使えないという小ネタがいっぱい詰まっている。 module Statistics where data Stat = Stat {n :: Int, mean :: Double, var :: Double, sd :: Double} __ deriving Show statistics xs = __ let ____ n = length xs ____ mean = (sum xs) / fromIntegral n ____ var = (sum $ map (\x -> (x - mean) * (x - mean)) xs) / fromIntegral n ____ sd = sqrt var __ in ____ Stat n mean var sd main = do __ putStr "input file name: " __ fname <- getLine __ contents <- readFile fname __ let rawdata = map (read :: String -> Double) $ lines contents __ let result = statistics rawdata __ putStrLn $ show (n result) __ putStrLn $ show (mean result) __ putStrLn $ show (var result) __ putStrLn $ show (sd result) 実行例 $ runhaskell statistics.hs
input file name: data 3 2.0 0.6666666666666666 0.816496580927726
by tnomura9
| 2019-05-22 07:31
| Haskell
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||