2013年11月25日月曜日

開発環境

初めてのコンピュータサイエンス(Jennifer CampbellPaul GriesJason MontojoGreg Wilson(著)長尾 高弘(翻訳))の9章(集合と辞書)、9.5(練習問題)、7.をHaskellで解いてみる。

その他参考書籍

9.5(練習問題)、7.

コード(BBEdit)

Sample.hs

{-# OPTIONS -Wall -Werror #-}
import qualified Data.Map as Map

main :: IO ()
main = do
    print c
    let newC1 = fetch c 'a' 3
    let newC2 = fetch c 'c' 4
    mapM_ putStrLn $ map either2string [newC1, newC2]

fetch :: (Ord k, Eq a, Show k) =>
    Map.Map k a -> k -> a -> Either String (Map.Map k a)
fetch m k v = if Map.lookup k m == Nothing then
                  Left $ "Unable to lookup key: " ++ show k
              else
                  Right $ Map.insert k v m

either2string :: (Show b) => Either String b -> String
either2string (Left a) = a
either2string (Right b) = show b

c :: Map.Map Char Int
c = Map.fromList [('a', 1), ('b', 2)]

入出力結果(Terminal, runghc)

$ runghc Sample.hs
fromList [('a',1),('b',2)]
fromList [('a',3),('b',2)]
Unable to lookup key: 'c'
$

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

0 コメント:

コメントを投稿