2013年11月19日火曜日

開発環境

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

その他参考書籍

8.8(練習問題)、4.

コード(BBEdit)

Sample.hs

{-# OPTIONS -Wall -Werror #-}
import Data.Char as Char
import System.Environment

main :: IO ()
main = do
    args <- getArgs
    contents <- readFile $ args !! 0
    print $ readSmallestSkip contents

readSmallestSkip :: String -> Int
readSmallestSkip [] = 0
readSmallestSkip s =  myMinimum . (map digitString2Int) .
    (filter isDigitString) . (map trim) . skipHeader . lines $ s

skipHeader :: [String] -> [String]
skipHeader xs = drop (length . takeWhile (=='#') . head $ xs) xs

trim :: String -> String
trim = ltrim . rtrim

ltrim :: String -> String
ltrim xs = drop (length . takeWhile Char.isSpace $ xs) xs

rtrim :: String -> String
rtrim = reverse . ltrim . reverse

isDigitString :: String -> Bool
isDigitString = all Char.isDigit

myMinimum :: (Ord a) => [a] -> a
myMinimum = foldr1 myMin

myMin :: (Ord a) => a -> a -> a
myMin n m = if n <= m then
                n
            else
                m
digitString2Int :: String -> Int
digitString2Int s = read s :: Int

入出力結果(Terminal, runghc)

$ runghc Sample.hs hopedale.txt
2
$

{-# OPTIONS -Wall -Werror #-}を記述してるから、細かく型を指定(:: Double)しないと警告がいっぱい出た。慣れるまでは{-# OPTIONS -Wall -Werror #-}の記述を消さずに細かく型を指定していくことに。

0 コメント:

コメントを投稿