2011-04-01から1ヶ月間の記事一覧

Data.Vector を使って迷路を解いてみる

Data.Vectorが配列のように使えて便利と Twitter で聞きました。一時話題になった迷路の問題を Haskell で解いてみました。 instance を使ったのも始めて。 import Data.List import qualified Data.Vector as V -- 関数と引数を逆に記述する関数 --「F# を…

List と ByteString の速度を比較する

List と ByteString を比較してみました。 以下のようなテキストファイルを読み込み、ファイル内に書かれた数字の文字列を数字に変換し、合計を算出するものです。 $ cat num.txt 127 69 76 70 1 1 1 0 0 0 0 0 0 0 0 0 2 0 3 0 1 0 0 0 64 158 4 8 52 0 0 0…

ByteString で hexDump

ByteString の練習に HEXDUMP してみました。 Data.ByteString Data.ByteString.Lazy Data.ByteString.Char8 Data.ByteString.Lazy.Char8 それぞれに Data.List と同じような関数が定義されています。 import Numeric import qualified Data.ByteString.Lazy…

「F# をまねる」をまねる

Ruby はオブジェクトが左から右に流れて行きます。 total = 0 (1..100).map{|x| x*2}.select{|x| x%6== 0}.each{|x|total+=x} print total # => 3366 Haskell だと右から左に流れますので左から右へ文字を書いている民族としてはやや不自然なところがありま…

MonadPlus:返す値の型をリスト、Maybeから選択できる関数

あどけない話 / QAで学ぶMonadの最後に MonadPlus を使って、返す型を指定することにより、検索結果をリストで返すか、Maybe で返すか指定できる関数が紹介されています。 MonadPlus の定義 class Monad m => MonadPlus m where -- | the identity of 'mplus…

Control.Applicative の を使ってみる

あどけない話 / QAで学ぶMonadを読んでいます。(2) >:m Control.Applicative > :t (<*>) (<*>) :: (Applicative f) => f (a -> b) -> f a -> f b > :t (<$>) (<$>) :: (Functor f) => (a -> b) -> f a -> f b -- (<$>) は Functor のインスタンス a に対して…

List もモナド

あどけない話 / QAで学ぶMonadを読んでいます。 fmap は名前からして map の親戚で 関数を List に摘要させるのかと思ったら、違った…Orz ghci> :m Control.Applicative ghci> :t map map :: (a -> b) -> [a] -> [b] ghci> :t fmap fmap :: (Functor f) => (…

do 記法から(>>=)を使った記法へ変換

do記法は構文糖です。 Real World Haskell p356 14章モナド:「モナド初心者だと感じているうちは構文糖であるdo記法を使うより(>>=)を明示的に書いた方が良いでしょう」とありますので、とりあえず、極力do記法は避けるよう努力してみます。 ioHello, ioWor…