2010-11-01から1ヶ月間の記事一覧

Data.HashTable を使ってみる

Data.HashTable を使ってみます。 > :m + Data.HashTable -- (==) : 比較する関数 -- hashString : Hash 値を計算する関数 > h <- new (==) hashString :: IO (HashTable String [(Int,String)]) -- 適当なキーで適当な値を入れてみる。 > insert h "abc" [(…

System.Time で今日の日付を取得

Data.DateTime の toGregorian' :: DateTime -> (Integer, Int, Int) での日付管理は便利なのですが、UTC の日付です。System.Time で取得した時間でも DateTime に変換した時点で UTC になってしまいます。 -- DateTime > getCurrentTime --=> 2010-11-27 0…

西暦から和暦に変換

type Year = Integer type Month = Int type Day = Int data Nengo = Nengo { start::(Year, Month, Day), end::(Year, Month, Day), name::String} deriving (Eq,Show) nengoTable :: [Nengo] nengoTable = [ Nengo { start = (1868, 1,25), end = (1912, 7…

存在する日付かどうかチェックする(Haskell)。

fromGregorian 関数は Day 型を作る。存在しない日付が指定されると一番近い存在する日付の Day を返す。 Day 型に変換してから、Gregorian に戻して比較して同じ日付ならば存在する日付。 import Data.Time.Calendar import Test.HUnit isExistingDate :: I…

Parsecにちょっと触ってみる(5):字句解析

Parsec, 高速なコンビネータパーサ の写経の続きです。 サンプルはバージョンが古いのでインポートするモジュール名が違います。 Parsec には 2 系バージョンと 3 系バージョンがあり、最新のバージョンは3.1.0。私のPCには 2.1.0.1 がインストールされてい…

フォームを閉じるとき終了確認をする(wxHaskell)

フォームを閉じるときにダイアログで終了の確認をします。 -- ghc --make Main.hs -o confirm.exe module Main where -- ライブラリを学習するためになるべく丁寧に依存先を書きました。 import Graphics.UI.WX (start) import Graphics.UI.WX.Events (on, c…

wxHaskell での「応答なし」を回避する。

重い処理をしながら textCtrl に記入しようとすると、Windows のイベントループが回らなくなって(応答なし)になってしまい、処理が終了すると一括して表示されてしまうという不具合が起きました。 重い処理をしながら結果をtextCtrl に記入したいのですが…

Parsecにちょっと触ってみる(4):式

Parsec, 高速なコンビネータパーサ の写経の続きです。 import Text.ParserCombinators.Parsec hiding (spaces) import Text.ParserCombinators.Parsec.Expr run :: Show a => Parser a -> String -> IO () run p input = case (parse p "" input) of Left e…

Parsecにちょっと触ってみる(3):エラーコンビネータ ()

Parsec, 高速なコンビネータパーサ の写経の続きです。 エラーコンビネータ () はエラーの記述をパーサに追加します。 パーサが失敗したとき、入力を消費することなくエラーメッセージを返します。 import Text.ParserCombinators.Parsec run :: Show a => P…

Parsecにちょっと触ってみる(2)

Parsec, 高速なコンビネータパーサ の写経の続きです。 sepBy と sepBy1 「パーサによって区切られるパーサの列をパースします」って分かりにくい説明が書かれていますが、動かしてみます。 import Text.ParserCombinators.Parsec tstSepBy :: String -> [St…

「Write Yourself a Scheme in 48 Hours」 を写経してみる。

「Write Yourself a Scheme in 48 Hours」と言うHaskellでSchemeを書くチュートリアルを見つけたので、理解出来るとこまで写経してみます。1.First Steps: Compiling and running 2.Parsing parsec によるパース -- spaces を自分で定義しているので Parsec …