2010-11-01から1ヶ月間の記事一覧
Data.HashTable を使ってみます。 > :m + Data.HashTable -- (==) : 比較する関数 -- hashString : Hash 値を計算する関数 > h <- new (==) hashString :: IO (HashTable String [(Int,String)]) -- 適当なキーで適当な値を入れてみる。 > insert h "abc" [(…
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…
fromGregorian 関数は Day 型を作る。存在しない日付が指定されると一番近い存在する日付の Day を返す。 Day 型に変換してから、Gregorian に戻して比較して同じ日付ならば存在する日付。 import Data.Time.Calendar import Test.HUnit isExistingDate :: I…
Parsec, 高速なコンビネータパーサ の写経の続きです。 サンプルはバージョンが古いのでインポートするモジュール名が違います。 Parsec には 2 系バージョンと 3 系バージョンがあり、最新のバージョンは3.1.0。私のPCには 2.1.0.1 がインストールされてい…
フォームを閉じるときにダイアログで終了の確認をします。 -- ghc --make Main.hs -o confirm.exe module Main where -- ライブラリを学習するためになるべく丁寧に依存先を書きました。 import Graphics.UI.WX (start) import Graphics.UI.WX.Events (on, c…
重い処理をしながら textCtrl に記入しようとすると、Windows のイベントループが回らなくなって(応答なし)になってしまい、処理が終了すると一括して表示されてしまうという不具合が起きました。 重い処理をしながら結果をtextCtrl に記入したいのですが…
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, 高速なコンビネータパーサ の写経の続きです。 エラーコンビネータ () はエラーの記述をパーサに追加します。 パーサが失敗したとき、入力を消費することなくエラーメッセージを返します。 import Text.ParserCombinators.Parsec run :: Show a => P…
Parsec, 高速なコンビネータパーサ の写経の続きです。 sepBy と sepBy1 「パーサによって区切られるパーサの列をパースします」って分かりにくい説明が書かれていますが、動かしてみます。 import Text.ParserCombinators.Parsec tstSepBy :: String -> [St…
「Write Yourself a Scheme in 48 Hours」と言うHaskellでSchemeを書くチュートリアルを見つけたので、理解出来るとこまで写経してみます。1.First Steps: Compiling and running 2.Parsing parsec によるパース -- spaces を自分で定義しているので Parsec …