2013年11月21日木曜日

開発環境

C実践プログラミング 第3版 (Steve Oualline (著)、 望月 康司 (監訳) (翻訳)、谷口 功 (翻訳)、オライリー・ジャパン)の12章(高度な型)、12.1(構造体)、12.2(共用体)、12.3(typedef)、12.4(enum型)、12.5(キャスト)、12.6(ビットフィールドまたは構造体の圧縮)、12.7(構造体配列)、12.9(プログラミング実習)、実習12-2をHaskellで解いてみる。

その他参考書籍

実習12-2.

コード(BBEdit)

Sample.hs

{-# OPTIONS -Wall -Werror #-}

main :: IO ()
main = mapM_ print $ [difference t1 t2, difference t2 t1]

data TimeAndDate = TimeAndDate {hour :: Int, minute :: Int, second :: Int,
                                month :: Int, day :: Int}

difference :: TimeAndDate -> TimeAndDate -> Double
difference a b = abs $
    (fromIntegral $ 60 * (hour a - hour b) + (minute a - minute b)) +
    (fromIntegral (second a - second b) :: Double) / 60.0

t1 :: TimeAndDate
t1 = TimeAndDate 1 2 3 4 5

t2 :: TimeAndDate
t2 = TimeAndDate 6 7 8 9 10

入出力結果(Terminal, runghc)

$ runghc Sample.hs
305.0833333333333
305.0833333333333
$

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

0 コメント:

コメントを投稿