トップ 最新 追記

uDiary

海野秀之(うんのひでゆき)の外部記憶

Twitter (twilog) / RSS / アンテナ / ぶくま

2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|08|
2010|01|02|03|05|06|07|10|11|
2011|03|08|
2012|02|04|07|08|10|
2013|01|02|03|05|06|08|11|12|
2014|01|02|05|06|07|08|09|12|
2015|01|02|03|04|

2014-01-24 (Fri)

[parconc] Parallel and Concurrent Programming in Haskell 読み始め

すぐに読みたかったので、英語なのに Kindle 版を買ってしまって失敗したかなと思ったのですが、英語は平易で読みやすい。(英語の本は紙で読んだほうが頭に入りやすいことが多い気がしてたのですけど)

とりあえず読み始めなんで、 まだ並列プログラミングに入る前の遅延評価についてなんですが、評価のようすを GHCi 上で確かめていくのが結構面白い。

Prelude> let x = 1 + 2 :: Int
Prelude> :sprint x
x = _
Prelude> x
3
Prelude> :sprint x
x = 3

GHCi 上で :sprint を使うと、変数の値を調べることができて、一回目の :sprint では "x = _" とあらわされています。この "_" は未評価 (thunk) を示しています。つぎに、x の値を表示させてから :sprint すると、x の内容が計算結果で置き換わっていることがわかります。

本では、この他にも、いくつかもう少し複雑な例が紹介されています。たとえば、

Prelude> let xs = map (+1) [1..10] :: [Int]
Prelude> :sprint xs
xs = _
Prelude> length xs
10
Prelude> :sprint xs
xs = [_,_,_,_,_,_,_,_,_,_]
Prelude> sum xs
65
Prelude> :sprint xs
xs = [2,3,4,5,6,7,8,9,10,11]

こんな感じ。おもしろい。

ねよっと。つづきは The Eval Monad, rpar, and rseq から。


2014-01-25 (Sat)

[parconc] Chapter 2

sudoku1, 2, 3, 4 を書きながら、並列化方法をいくつか。

まなんだこと:

  • 遅延評価
  • rpar/rsec/runEval
  • force/deepseq
  • parMap (Control.Parallel.Strategies にあるのとは別に書いた)

本のテーマとは別ですが、出くわした関数:

  • getArgs
  • readFile

つづきは Chapter 3 あたまから。


2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|08|
2010|01|02|03|05|06|07|10|11|
2011|03|08|
2012|02|04|07|08|10|
2013|01|02|03|05|06|08|11|12|
2014|01|02|05|06|07|08|09|12|
2015|01|02|03|04|
Categories 3imp | Card | Cutter | Dalvik | Euler | Football | GAE/J | Hand | Haskell | Re:View | Ruby | Scheme | TQD | Tiger | TigerBook読 | UikiTeXi | Verilog | Violin | Web | parconc | tDiary | お勉強 | エントロピー | ツン読 | | 将棋 | 政治について | | 模写してみよう | 確率論 | 設定など | 雑文 | 音声