2013年12月28日土曜日

開発環境

初めてのコンピュータサイエンス(Jennifer CampbellPaul GriesJason MontojoGreg Wilson(著)長尾 高弘(翻訳))の14章(GUI)、14.8(練習問題)、14-4.をHaskellで解いてみる。

その他参考書籍

14.8(練習問題)、14-4.

コード(BBEdit)

Sample.hs

{-# OPTIONS -Wall -Werror #-}
module Main where

import System.Environment

main :: IO ()
main = do
    (s:_) <- getArgs
    putStrLn $ count s

count :: String -> String
count s = let (a, t, g, c) = dna s
          in concat $ map (\(x, n) -> x:"の数: " ++ show n ++ " ")
                          [('A', a), ('T', t), ('G', g), ('C', c)]

dna :: String -> (Int, Int, Int, Int)
dna = foldr (\x (a, t, g, c) -> case x of
                                    'A' -> (a + 1, t, g, c)
                                    'T' -> (a, t + 1, g, c)
                                    'G' -> (a, t, g + 1, c)
                                    'C' -> (a, t, g, c + 1)
                                    _   -> (a, t, g, c)) (0, 0, 0, 0)

入出力結果(Terminal, runghc)

$ runghc Sample.hs AAAAATTTTCCCGGVGCTA
Aの数: 6 Tの数: 5 Gの数: 3 Cの数: 4 
$

慣れるまでは{-# OPTIONS -Wall -Werror #-}の記述を消さずに細かく型を指定していくことに。

0 コメント:

コメントを投稿