2013年12月20日金曜日

開発環境

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

その他参考書籍

12.7(練習問題)、12-16.

コード(BBEdit)

Sample.hs

{-# OPTIONS -Wall -Werror #-}
import System.Environment

main :: IO ()
main = do
    (a:_) <- getArgs
    contents <- readFile a
    mapM_ print $ map (findLast contents)
                      ["String", "main", "findLast", "haskell"]

findLast :: String -> String -> Maybe (Int, String)
findLast c s =
    let ls = lines c
    in f (length ls) s (reverse ls) 

f :: Int -> String -> [String] -> Maybe (Int, String)
f _ _ [] = Nothing
f n s (l:ls) = if elem s (words l) then Just (n, l) else f (n - 1) s ls

入出力結果(Terminal, runghc)

$ runghc Sample.hs Sample.hs
Just (16,"f :: Int -> String -> [String] -> Maybe (Int, String)")
Just (5,"main = do")
Just (12,"findLast c s =")
Nothing
$

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

0 コメント:

コメントを投稿