開発環境
- OS X Mavericks - Apple(OS)
- BBEdit - Bare Bones Software, Inc., Emacs (Text Editor)
- Haskell (純粋関数型プログラミング言語)
- GHC (The Glasgow Haskell Compiler) (処理系)
- The Haskell Platform (インストール方法、モジュール等)
初めてのコンピュータサイエンス(Jennifer Campbell、Paul Gries、Jason Montojo、Greg Wilson(著)長尾 高弘(翻訳))の6章(条件分岐)、6.5(練習問題)、1から4をHaskellで解いてみる。
その他参考書籍
- プログラミングHaskell (オーム社) Graham Hutton(著) 山本 和彦(翻訳)
- Real World Haskell―実戦で学ぶ関数型言語プログラミング (オライリージャパン) Bryan O'Sullivan John Goerzen Don Stewart(著) 山下 伸夫 伊東 勝利 株式会社タイムインターメディア(翻訳)
6.5(練習問題)、1から4.
コード(BBEdit)
Sample.hs
{-# OPTIONS -Wall -Werror #-} main :: IO () main = do putStrLn "1." mapM_ putStrLn $ map show booleans putStrLn "2." let a = True && False b = False && True putStrLn "どちらもFalse" putStrLn $ show a ++ ' ':show b putStrLn "3." putStrLn "a. 両方がTrueならTrue" mapM_ putStrLn $ map (\x -> show x ++ ' ':(show . bothTrue $ x)) boolPairs putStrLn "b. xがFalseならTrue" mapM_ putStrLn $ map (\x -> show x ++ ' ':(show . isX $ x)) boolPairs putStrLn "c. 少なくとも1つがTrue" mapM_ putStrLn $ map (\x -> show x ++ ' ':(show . anyPair $ x)) boolPairs putStrLn "4.排他的論理和" mapM_ putStrLn $ map (\x -> show x ++ ' ':(show . xor $ x)) boolPairs booleans :: [(Bool, Bool)] booleans = [(True && (not False), True), (True || True && False, True), ((not True) || (not False), True), ((52 :: Double) < 52.3, True), (1 + (52 :: Double) < 52.3, False), ((4 :: Double) /= 4.0, True)] bothTrue :: (Bool, Bool) -> Bool bothTrue (True, True) = True bothTrue _ = False isX :: (Bool, Bool) -> Bool isX (False, _) = True isX (_, _) = False boolPairs :: [(Bool, Bool)] boolPairs = [(a, b) | a <- [True, False], b <- [True, False]] anyPair :: (Bool, Bool) -> Bool anyPair (a, b) = any id [a, b] xor :: (Bool, Bool) -> Bool xor (True, False) = True xor (False, True) = True xor _ = False
入出力結果(Terminal, runghc)
$ runghc Sample.hs 1. (True,True) (True,True) (True,True) (True,True) (False,False) (False,True) 2. どちらもFalse False False 3. a. 両方がTrueならTrue (True,True) True (True,False) False (False,True) False (False,False) False b. xがFalseならTrue (True,True) False (True,False) False (False,True) True (False,False) True c. 少なくとも1つがTrue (True,True) True (True,False) True (False,True) True (False,False) False 4.排他的論理和 (True,True) False (True,False) True (False,True) True (False,False) False $
{-# OPTIONS -Wall -Werror #-}を記述してるから、細かく型を指定(:: Double)しないと警告がいっぱい出た。慣れるまでは{-# OPTIONS -Wall -Werror #-}の記述を消さずに細かく型を指定していくことに。
0 コメント:
コメントを投稿