2014年1月8日水曜日

開発環境

初めてのコンピュータサイエンス(Jennifer CampbellPaul GriesJason MontojoGreg Wilson(著)長尾 高弘(翻訳))の15章(データベース)、15.11(練習問題)、2-a.をHaskellで解いてみる。

その他参考書籍

15.11(練習問題)、2-a.

コード(BBEdit)

Sample.hs

{-# OPTIONS -Wall -Werror #-}
module Main where

import Database.HDBC
import Database.HDBC.Sqlite3

main :: IO ()
main = do
    conn <- connectSqlite3 "census.db"
    _ <- run conn "DROP TABLE Capitals" []
    _ <- run conn ("CREATE TABLE Capitals (State TEXT, City TEXT, " ++
                   "Population Integer, PRIMARY KEY (State))") []
    mapM_ (run conn "INSERT INTO Capitals VALUES(?, ?, ?)") $
          map (\(a, b, c) -> [toSql a, toSql b, toSql c]) state
    commit conn
    putStrLn "州/準州、州/準州都、人口"
    r <- quickQuery' conn ("SELECT * FROM Capitals") []
    mapM_ putStrLn $ map (\(a:b:c:[]) -> a ++ ", " ++ b ++ ", " ++ c) $
          map (\x -> map (\y -> fromSql y :: String) x) r
    disconnect conn

state :: [(String, String, Int)]
state = [("ニューファンドランド・ラブラドール州", "セント・ジョンズ", 172918),
         ("プリンスエドワードアイランド州", "シャーロットタウン", 58358),
         ("ノバスコシア州", "ハリファックス", 359183),
         ("ニューブランズウィック州", "フレデリクトン", 81346),
         ("ケベック州", "ケベック", 682757),
         ("オンタリオ州", "トロント", 4682897),
         ("マニトバ州", "ウィニペグ", 671274),
         ("サスカチュワン州", "レジャイナ", 192800),
         ("アルバータ州", "エドモントン", 937845),
         ("ブリティッシュコロンビア州", "ビクトリア", 311902),
         ("ユーコン準州", "ホワイトホース", 21405),
         ("ノースウェスト準州", "イエローナイフ", 16541),
         ("ヌナブト準州", "イカルイト", 5236)]

入出力結果(Terminal, runghc)

$ runghc Sample.hs
州/準州、州/準州都、人口
ニューファンドランド・ラブラドール州, セント・ジョンズ, 172918
プリンスエドワードアイランド州, シャーロットタウン, 58358
ノバスコシア州, ハリファックス, 359183
ニューブランズウィック州, フレデリクトン, 81346
ケベック州, ケベック, 682757
オンタリオ州, トロント, 4682897
マニトバ州, ウィニペグ, 671274
サスカチュワン州, レジャイナ, 192800
アルバータ州, エドモントン, 937845
ブリティッシュコロンビア州, ビクトリア, 311902
ユーコン準州, ホワイトホース, 21405
ノースウェスト準州, イエローナイフ, 16541
ヌナブト準州, イカルイト, 5236
$

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

0 コメント:

コメントを投稿