Haskell RandomパッケージとbyteStringの学習

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

Randomパッケージのインストール

多分、--libをつけないとexecutableじゃないと怒られる。

$ brew install cabal-install
$ cabal update
$ cabal install --lib random


random関数

random関数はジェネレーターgを受け取り、乱数aとジェネレーターgを返す。

ghci> import System.Random 
ghci> :t random
random :: (Random a, RandomGen g) => g -> (a, g)
ghci> random (mkStdGen 100) 
(-3633736515773289454,693699796 2103410263)
ghci> random (mkStdGen 100) 
(-3633736515773289454,693699796 2103410263)

同じジェネレーターだと参照透過性が保たれているのがわかる。

mkStdGenは整数値を引数にとりその値を元にするジェネレーターを返す。

ghci> :t mkStdGen
mkStdGen :: Int -> StdGen

返却される乱数の型は型注釈で指定できる。

ghci> random (mkStdGen 100) :: (Int, StdGen)
(-3633736515773289454,693699796 2103410263)
ghci> random (mkStdGen 100) :: (Bool, StdGen)
(True,4041414 40692)


byteString

byteStringはリストのような1バイト固定の列データ。リスト同じく遅延読み込みを行うが、最初のデータを評価した時に最後まで評価をする。または、64Kバイト(チャンク)ずつ評価を行う。

リストをbyteStringにpackする。

ghci> import qualified Data.ByteString as S
ghci> import qualified Data.ByteString.Lazy as B
ghci> B.pack [99, 97, 110]
"can"
ghci> B.pack [98..120]
"bcdefghijklmnopqrstuvwx"

byteStringをリストにunpackする。

ghci> B.unpack $ B.pack [98..120]
[98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120]

byteStringの先頭に値を追加する。cons関数を使用する。

ghci> B.cons 85 $ B.pack [80,81,82,84]
"UPQRT"

ファイルをbyteStringに格納する

B.readFile "data.txt"