Movatterモバイル変換


[0]ホーム

URL:


Takashi Kawachi, profile picture
Uploaded byTakashi Kawachi
PDF, PPTX953 views

Haskell超初心者勉強会11

Embed presentation

Download as PDF, PPTX
Haskell超初心者勉強会11回2013/7/29Monday, July 29, 13
今日は「すごいHaskell」本9章 もっと入力、もっと出力•入力ストリームからの読み込み•ファイルの読み書き•コマンドライン引き数•ランダム性•bytestringMonday, July 29, 13
入力ストリーム•getContents :: IO String•一度に全てを読み込まない。メモリを食いつぶさない。文字列(文字リスト)を遅延評価する。import Data.Charmain = docontents <- getContentsputStr $ map toUpper contentsMonday, July 29, 13
ファイルの読み込み•hFoo は Handle を引数に取る関数•hGetContents は stdin の代わりにhandle から読み込む•遅延評価import System.IOmain = dohandle <- openFile “baabaa.txt” ReadModecontents <- hGetContents handleputStr contentshClose handleMonday, July 29, 13
ファイルの読み込みwithFile•開いて、関数実行して、閉じる•例外の場合でも確実に閉じるimport System.IOmain = dowithFile “baabaa.txt” ReadMode $ handle docontents <- hGetContents handleputStr contentsMonday, July 29, 13
Control.Exception のbracket•何かして、関数実行して、何かするwithFile’ :: FilePath -> IOMode -> (Handle ->IO a)withFile’ name mode f = bracket (openFilename mode)(handle -> hClose handle)(handle -> f handle)Monday, July 29, 13
Control.Exception のbracketOnError•何かして、関数実行して、例外のときだけ何かする•例:一時ファイルを開いて、処理する、例外のときだけ一時ファイルを消すMonday, July 29, 13
その他の h•h じゃない版と同じ挙動(handle を取る意外は)hClosehGetContentshGetLinehPutStrhPutStrLnhGetCharMonday, July 29, 13
readFile•readFile :: FilePath -> IO String•開いて読んで閉じるimport System.IOmain = docontents <- readFile “baabaa.txt”putStr contentsMonday, July 29, 13
writeFile/appendFile•readFile :: FilePath -> String -> IO ()•開いて書いて閉じるimport System.IOmain = docontents <- readFile “baabaa.txt”writeFile “baabaacaps.txt” (map toUppercontents)Monday, July 29, 13
コマンドライン引数•System.Environment の getArgs/getProgNameimport System.Environmentimport Data.Listmain = doargs <- getArgsprogName <- getProgNameputStrLn “The arguments are:”mapM putStrLn argsputStrLn “The Program name is:”putStrLn progNameMonday, July 29, 13
ランダム性•System.Random モジュール•RandomGen型クラス:ランダム性の源として使える型•Random型クラス:ランダムな値として使える型random :: (RandomGen g, Random a) => g -> (a,g)mkStdGen :: Int -> StdGenMonday, July 29, 13
乱数のテスト•random はピュアな関数•乱数を続けて発生させるときは戻り値の RandomGen を次の乱数源として使う> random (mkStdGen 100) :: (Int, StdGen)(-3650871090684229393,693699796 2103410263)> random (mkStdGen 100) :: (Int, StdGen)(-3650871090684229393,693699796 2103410263)Monday, July 29, 13
randoms•ランダム値の無限リストを返す•RandomGen は返さないrandoms :: (RandomGen g, Random a) => g -> [a]Monday, July 29, 13
randomR•ある範囲の乱数を返す•(下限, 上限) -> (ジェネレータ) ->(乱数, 新ジェネレータ)randomR :: (RandomGen g, Random a) =>(a, a) -> g -> (a, g)Monday, July 29, 13
getStdGen•グローバル乱数ジェネレータを返す•プログラム実行毎に違う値•1実行中は同じ値を返すgetStdGen :: IO StdGenMonday, July 29, 13
newStdGen•グローバル乱数ジェネレータを更新•新しい乱数ジェネレータを返すnewStdGen :: IO StdGenMonday, July 29, 13
thunk•サンク(thunk)=遅延された計算•リストの未評価の部分は thunk•文字列(文字リスト)は thunk が沢山なので遅いMonday, July 29, 13
bytestring•リストに似たデータ構造•要素は 1 byteのサイズ固定Monday, July 29, 13
正格 vs 遅延• 正格 bytestring (Data.ByteString)• thunk なし• 最初のバイトを評価する時、全体を評価• 遅延 bytestring (Data.ByteString.Lazy)• 64KB chunk 毎に評価される• 64KB は L2 cache にフィットする良いサイズMonday, July 29, 13
pack/unpack•リストと相互変換•Word8 は 8 bits unsigned intpack :: [Word8] -> ByteStringunpack :: ByteString -> [Word8]> import qualified Data.ByteString.Lazy as B> let x = B.pack [99, 97, 110]> x“can”> B.unpack x[99, 97, 110]Monday, July 29, 13
fromChunks•正格ByteStringのリスト ->遅延ByteStringMonday, July 29, 13
bytestring モジュールの関数• Data.List と似た関数• head, tail, init, null, length, map, foldl,foldr, concat, takeWhile, filter など• http://hackage.haskell.org/package/bytestring/• System.IO と似た関数• readFile :: FilePath -> IO ByteString などMonday, July 29, 13
文字列用プログラムをbytestring 向けに1. 修飾付き import する2. 対応する関数の前にモジュール名を付け足す• まず文字列で書いて、性能が足りなかったら bytestring を試すのがオススメMonday, July 29, 13

Recommended

PDF
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
PPTX
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
PDF
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
PPTX
R -> Python
PDF
Cloud computing competition by Hapyrus
PDF
Rakuten tech conf
PPTX
前期講座09
KEY
カジュアルにソースコードリーディング
PDF
Haskell で CLI
PDF
Common LispでGPGPU
 
PDF
mmapパッケージを使ってお手軽オブジェクト管理
PDF
GNU awk (gawk) を用いた Apache ログ解析方法
PDF
TensorFlow White Paperを読む
PDF
PostgreSQLとPythonとSQL
PDF
第3回Webkit/HTML5勉強会 - File APIと加速度センサー
PDF
awk v.s. bashどっちが強い?@OSC2011Tokyo
PDF
Elasticsearch入門 pyfes 201207
PDF
ジャパネットQB GPars
PDF
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
PDF
mlr-grep - レコード指向grep
PDF
Redis Intro Osc2010 Tokyo Spring
PDF
200319 eash python_shareslide_functions
PDF
Log analysis by using elasticsearch,kibana and fluentd.
PPTX
入門機械学習6章
PPT
20090107 Postgre Sqlチューニング(Sql編)
PDF
入門機械学習1,2章
PDF
StarlingAssetmanagerの説明
 
PDF
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PDF
Scalaのオブジェクトの話
PDF
やさしいIteratee入門

More Related Content

PDF
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
PPTX
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
PDF
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
PPTX
R -> Python
PDF
Cloud computing competition by Hapyrus
PDF
Rakuten tech conf
PPTX
前期講座09
KEY
カジュアルにソースコードリーディング
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
R -> Python
Cloud computing competition by Hapyrus
Rakuten tech conf
前期講座09
カジュアルにソースコードリーディング

What's hot

PDF
Haskell で CLI
PDF
Common LispでGPGPU
 
PDF
mmapパッケージを使ってお手軽オブジェクト管理
PDF
GNU awk (gawk) を用いた Apache ログ解析方法
PDF
TensorFlow White Paperを読む
PDF
PostgreSQLとPythonとSQL
PDF
第3回Webkit/HTML5勉強会 - File APIと加速度センサー
PDF
awk v.s. bashどっちが強い?@OSC2011Tokyo
PDF
Elasticsearch入門 pyfes 201207
PDF
ジャパネットQB GPars
PDF
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
PDF
mlr-grep - レコード指向grep
PDF
Redis Intro Osc2010 Tokyo Spring
PDF
200319 eash python_shareslide_functions
PDF
Log analysis by using elasticsearch,kibana and fluentd.
PPTX
入門機械学習6章
PPT
20090107 Postgre Sqlチューニング(Sql編)
PDF
入門機械学習1,2章
PDF
StarlingAssetmanagerの説明
 
PDF
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
Haskell で CLI
Common LispでGPGPU
 
mmapパッケージを使ってお手軽オブジェクト管理
GNU awk (gawk) を用いた Apache ログ解析方法
TensorFlow White Paperを読む
PostgreSQLとPythonとSQL
第3回Webkit/HTML5勉強会 - File APIと加速度センサー
awk v.s. bashどっちが強い?@OSC2011Tokyo
Elasticsearch入門 pyfes 201207
ジャパネットQB GPars
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
mlr-grep - レコード指向grep
Redis Intro Osc2010 Tokyo Spring
200319 eash python_shareslide_functions
Log analysis by using elasticsearch,kibana and fluentd.
入門機械学習6章
20090107 Postgre Sqlチューニング(Sql編)
入門機械学習1,2章
StarlingAssetmanagerの説明
 
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)

Viewers also liked

PDF
Scalaのオブジェクトの話
PDF
やさしいIteratee入門
PDF
Scalaでの例外処理
PDF
Haskell超初心者勉強会20
PDF
Haskell超初心者勉強会17
PDF
Haskell超初心者勉強会14
PDF
Elastic beanstalk と Docker と Play
PDF
Scala稟議の通し方(公開版)
Scalaのオブジェクトの話
やさしいIteratee入門
Scalaでの例外処理
Haskell超初心者勉強会20
Haskell超初心者勉強会17
Haskell超初心者勉強会14
Elastic beanstalk と Docker と Play
Scala稟議の通し方(公開版)

Similar to Haskell超初心者勉強会11

PDF
関数プログラミング入門
PDF
Haskell超入門 Part.1
PDF
すごいHaskell読書会 第六章 発表資料
PDF
すごいHaskell楽しく学ぼう 第6章
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
PDF
これから Haskell を書くにあたって
PDF
F#入門 ~関数プログラミングとは何か~
ODP
これから Haskell を書くにあたって
ODP
Vim scriptとJavaとHaskell
PDF
たのしい関数型
PDF
FP習熟度レベルとFSharpxのIteratee
KEY
Applicative functor
KEY
 
PDF
これからの「言語」の話をしよう ―― 未来を生きるためのツール
PPTX
Programming Haskell Chapter 11 切符番号選び
PDF
すごいHaskell読書会#1 in 大阪
PPTX
関数型言語&形式的手法セミナー(3)
PDF
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
PDF
初めてのHaskell (表)
 
PDF
姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell
関数プログラミング入門
Haskell超入門 Part.1
すごいHaskell読書会 第六章 発表資料
すごいHaskell楽しく学ぼう 第6章
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
これから Haskell を書くにあたって
F#入門 ~関数プログラミングとは何か~
これから Haskell を書くにあたって
Vim scriptとJavaとHaskell
たのしい関数型
FP習熟度レベルとFSharpxのIteratee
Applicative functor
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Programming Haskell Chapter 11 切符番号選び
すごいHaskell読書会#1 in 大阪
関数型言語&形式的手法セミナー(3)
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
初めてのHaskell (表)
 
姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

More from Takashi Kawachi

PDF
MacroPyがすごい
PDF
Sbt doctest
PDF
例外のlogを快適に
PDF
最小 Hello World! チャレンジ
PDF
Sbt lock1
PDF
Silhouette intro
MacroPyがすごい
Sbt doctest
例外のlogを快適に
最小 Hello World! チャレンジ
Sbt lock1
Silhouette intro

Haskell超初心者勉強会11


[8]ページ先頭

©2009-2025 Movatter.jp