<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Haskell / Drkcore</title><link>http://blog.kzfmix.com/entry/Haskell</link><description>Programming, Music, Snowboarding</description><atom:link href="http://blog.kzfmix.com/rss/" rel="self"></atom:link><language>ja</language><lastBuildDate>Mon, 23 Jan 2012 20:39:20 +0900</lastBuildDate><item><title>Basic Category Theory for Computer Scientists</title><link>http://blog.kzfmix.com/entry/1327314892</link><description>&lt;p&gt;薄いわりにはなかなか読み進めることができないのは、数学的な素養が足りないからか。とhakellの型情報と突き合わせながら読んでいるが、何度も読みなおす本になりそう。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/0262660717/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/411642SVPGL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;Basic Category Theory for Computer Scientists (Foundations of Computing)&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Benjamin C. Pierce&lt;br /&gt;
    The MIT Press / 2164円 ( 1991-08-07 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;わからないところがあれば検索して周辺情報を探しながら読んでるが、&lt;a href="http://www.ipsj.or.jp/07editj/promenade/4703.pdf"&gt;自分自身を出力するプログラム&lt;/a&gt;の後半のFunctorの説明がわかりやすかった。定義5もしっくりきた。T2 -&amp;gt; Tのμってjoin(concat)のことか。&lt;/p&gt;
&lt;p&gt;他には&lt;a href="http://snak.tdiary.net/20091020.html"&gt;The Typeclassopedia&lt;/a&gt;を読みなおしてみたけど、発見が色々あって得るものが多かった。これも何度か読みなおすことになりそう。&lt;/p&gt;
&lt;p&gt;他に&lt;a href="http://www.ipl.t.u-tokyo.ac.jp/~hamana/local/monad.pdf"&gt;関数型プログラマのためのモナド理論&lt;/a&gt;ってのも読んだけど、これはちと難しかった。圏論の本を読んでおくべきなのだろうけど日本語の本でヨサゲなのはないだろうか。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873114233/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51rAJvgAkgL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;Real World Haskell―実戦で学ぶ関数型言語プログラミング&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Bryan O'Sullivan&lt;br /&gt;
    オライリージャパン / 3990円 ( 2009-10-26 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;</description><pubDate>Mon, 23 Jan 2012 20:39:20 +0900</pubDate><category>Haskell</category></item><item><title>ネットワーク関連の本を読んでみることにした</title><link>http://blog.kzfmix.com/entry/1323779856</link><description>&lt;p&gt;最近ちょっとヤル気がおきないので、別のことでもしようとネットワーク関連の本でも読んでみることにした。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774117544/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41TQMN3JJML._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;UNIXネットワークプログラミング入門&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    雪田 修一&lt;br /&gt;
    技術評論社 / ?円 ( 2003-06-05 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774147451/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51VqNMNcENL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;ルーター自作でわかるパケットの流れ&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    小俣　光之&lt;br /&gt;
    技術評論社 / 1974円 ( 2011-07-09 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;そういえばRWHにもSocket通信の章があったので後で読みなおしてみるか。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/0596514980/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51I6dXmEFKL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;Real World Haskell&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Bryan O'Sullivan&lt;br /&gt;
    Oreilly &amp; Associates Inc / 4058円 ( 2008-12-05 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;</description><pubDate>Tue, 13 Dec 2011 21:38:07 +0900</pubDate><category>Linux</category><category>Haskell</category></item><item><title>JavaCCでパーサを作ってみる</title><link>http://blog.kzfmix.com/entry/1321565547</link><description>&lt;p&gt;ふつうのコンパイラをつくろうを読み始めた。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797337958/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/419S%2BG0jL-L._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    青木 峰郎&lt;br /&gt;
    ソフトバンククリエイティブ / 3360円 ( 2009-07-24 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;JavaCCを使ったAdderの写経。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://javacc.java.net/"&gt;The Java Parser Generator&lt;/a&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;STATIC&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;PARSER_BEGIN&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Adder&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.io.*&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Adder&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="nl"&gt;arg:&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;evaluate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ParseException&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;err&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMessage&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="n"&gt;ParseException&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
         &lt;span class="n"&gt;Reader&lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;StringReader&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
         &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Adder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;expr&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;PARSER_END&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Adder&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="nl"&gt;SKIP:&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot; &amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;\t&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;\r&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="nl"&gt;TOKEN:&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nl"&gt;INTEGER:&lt;/span&gt; &lt;span class="o"&gt;([&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;9&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;])+&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="nf"&gt;expr&lt;/span&gt;&lt;span class="o"&gt;():&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Token&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;INTEGER&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;+&amp;quot;&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;INTEGER&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;EOF&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseLong&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseLong&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;イマイチよくわからないのは慣れてないせいか？パーサだったらRWHのParsecが楽しかった。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873114233/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51rAJvgAkgL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;Real World Haskell―実戦で学ぶ関数型言語プログラミング&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Bryan O'Sullivan&lt;br /&gt;
    オライリージャパン / 3990円 ( 2009-10-26 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Scalaも調べたら&lt;a href="http://www.coins.tsukuba.ac.jp/~i021216/Scala-parser-combinator.pdf"&gt;スライド見つけた&lt;/a&gt;。あとで試してみようっと。&lt;/p&gt;</description><pubDate>Fri, 18 Nov 2011 19:06:53 +0900</pubDate><category>Haskell</category><category>Scala</category><category>Java</category></item><item><title>最後のHaskell読書会に参加した</title><link>http://blog.kzfmix.com/entry/1292703615</link><description>&lt;p&gt;最終章。この章自体はさらっとしていて、どこにつながっていくのかいまいちよくわからなかったのだけど、最後にLTっぽい感じで&lt;a href="http://ja.wikipedia.org/wiki/%E9%83%A8%E5%88%86%E8%A9%95%E4%BE%A1"&gt;部分評価&lt;/a&gt;の話が出てきてたのでソッチの方に関係していく話題だったのかな？と思った。LLVMとかPyPyの方向？あとでちゃんと追いかけてみようかな。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274067815/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41pybn9bpCL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;プログラミングHaskell&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Graham Hutton&lt;br /&gt;
    オーム社 / ￥ 2,940 ( 2009-11-11 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://twitter.com/#!/yoshinabu/"&gt;@yoshinabu&lt;/a&gt;のイタリア土産。と思いきや&lt;a href="http://twitter.com/#!/ftnk/status/16043127873736704"&gt;フランス&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;&lt;img alt="1292703303" src="http://www.kzfmix.com/images/blog/1292703303.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;さて、次回からはJGP(JavaScript: The Good Parts)を読んでいくことになった。HTML5のおもしろそうな機能はjavascriptいるよね？みたいな流れで、半年くらいでこれ読んだら、他の本(&lt;a href="http://blog.livedoor.jp/kotesaki/archives/1592844.html"&gt;WebSocket&lt;/a&gt;とか面白そう)に行くのか、派生的に別れていくのかな。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113911/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41H0Dk-K3PL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Douglas Crockford&lt;br /&gt;
    オライリージャパン / ￥ 1,890 ( 2008-12-22 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;第一回目は2/12(sat)@富士の予定。そのうち案内が出ると思いますが、興味があれば参加するとよいと思います。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;他には入門自然言語処理とかも候補に上がっていたが、いまいち雰囲気を勝ち取れそうになかった。少し前からプッシュしていかないとなかなか難しいですね(twitterでもいいと思うけど)。もう少し動機付けが必要かな？&lt;/p&gt;
&lt;p&gt;で、もし入門自然言語処理を選択するなら、ゴールを「twitterボットをつくってみる」とかそんな感じにしておけば雰囲気的に向かう方向がはっきりするのかなぁと思った。「本書を通してPythonを学ぶ」でもいいのかもしれないけど。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873114705/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51zWTnQvnuL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;入門 自然言語処理&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Steven Bird&lt;br /&gt;
    オライリージャパン / ￥ 3,990 ( 2010-11-11 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;その流れで恋するRubyの話とか&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839917299/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41MR9RMCQ6L._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;恋するプログラム―Rubyでつくる人工無脳&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    秋山 智俊&lt;br /&gt;
    毎日コミュニケーションズ / ￥ 2,625 ( 2005-04 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;個人的にはこっち方面も&lt;a href="http://twitter.com/#!/kzfm/status/982014246"&gt;好き&lt;/a&gt;なのでこういう勉強会が流れるのも嬉しいが。&lt;/p&gt;</description><pubDate>Sun, 19 Dec 2010 06:17:35 +0900</pubDate><category>Haskell</category><category>javascript</category></item><item><title>明日は最後のHaskell読書会</title><link>http://blog.kzfmix.com/entry/1292582962</link><description>&lt;p&gt;前回はいけなかったけど、それ以外は全て参加した。この読書会で得るものは多かったように思う。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.haskell.shizu-dev.org/news/dai12kaihaskelldokushokaikaisainooshirase"&gt;第１２回Haskell読書会開催のお知らせ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274067815/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41pybn9bpCL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;プログラミングHaskell&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Graham Hutton&lt;br /&gt;
    オーム社 / ￥ 2,940 ( 2009-11-11 )&lt;br /&gt;
    在庫あり。&lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;読書会だけだと受身色が強くなりがちなので、今後はもっと成果を出していくような方向も模索していきたいところ。&lt;/p&gt;</description><pubDate>Fri, 17 Dec 2010 19:52:16 +0900</pubDate><category>Haskell</category></item><item><title>関数プログラミングの楽しみ(関数画像)</title><link>http://blog.kzfmix.com/entry/1289084125</link><description>&lt;p&gt;第7章の関数画像のところで、Panが面白そうなので触ってみようと、&lt;a href="http://www.haskell.org/edsl/pansharp.html"&gt;サイトを見てみたらWindows用だった&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class="awsxom"&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274068056/ref=nosim/kaerutyuuihou-22"&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/41UpWfJzzpL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
&lt;strong&gt;関数プログラミングの楽しみ&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
 &lt;br /&gt;
オーム社 / ￥ 4,410 ()&lt;br /&gt;
在庫あり。&lt;br /&gt;
&lt;br clear="all" /&gt;
&lt;/div&gt;&lt;/p&gt;
</description><pubDate>Sun, 07 Nov 2010 07:55:36 +0900</pubDate><category>Haskell</category></item><item><title>おりがみプログラミング 3.14</title><link>http://blog.kzfmix.com/entry/1288179567</link><description>&lt;p&gt;apoL'を使ってinsertを定義する&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;-- 3.14

apoL' :: (b -&amp;gt; Maybe (a, Either b (List a))) -&amp;gt; b -&amp;gt; List a
apoL' f u = case f u of
              Nothing            -&amp;gt; Nil
              Just (x, Left v)   -&amp;gt; Cons x (apoL' f v)
              Just (x, Right xs) -&amp;gt; Cons x xs

insert3 = apoL' step u
    where 
      step Nil = Nothing
      step (Cons x xs) = if x &amp;lt; u then Just (x, Left xs) else Just (x, Right xs)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;とやると&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Not in scope: `u'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;と言われるが理由がわからん。&lt;/p&gt;

&lt;p&gt;&lt;div class="awsxom"&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274068056/ref=nosim/kaerutyuuihou-22"&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/41UpWfJzzpL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
&lt;strong&gt;関数プログラミングの楽しみ&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
 &lt;br /&gt;
オーム社 / ￥ 4,410 ()&lt;br /&gt;
在庫あり。&lt;br /&gt;
&lt;br clear="all" /&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;疲れたので、今日はもう読むのをやめよう。&lt;/p&gt;
</description><pubDate>Wed, 27 Oct 2010 20:52:50 +0900</pubDate><category>Haskell</category></item><item><title>第10回静岡Haskell読書会</title><link>http://blog.kzfmix.com/entry/1288006033</link><description>&lt;p&gt;先週末の読書会。切符遊びの章。&lt;/p&gt;

&lt;p&gt;&lt;div class="awsxom"&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274067815/ref=nosim/kaerutyuuihou-22"&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/41pybn9bpCL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
&lt;strong&gt;プログラミングHaskell&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
Graham Hutton &lt;br /&gt;
オーム社 / ￥ 2,940 ()&lt;br /&gt;
在庫あり。&lt;br /&gt;
&lt;br clear="all" /&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;団子うまかった。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.kzfmix.com/images/blog/1288005978.jpg" alt="1288005978" /&gt;&lt;/p&gt;

&lt;p&gt;懇親会はセルフ串揚げの店。マジセルフ。ネタケースから串を持ってきて、衣つけて揚げる。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.kzfmix.com/images/blog/1288005975.jpg" alt="1288005975" /&gt;&lt;/p&gt;

&lt;p&gt;なんていうか、この地域の居酒屋の名前を借りるなら、串電車でGoみたいなセルフ感満載だった。&lt;/p&gt;

&lt;p&gt;来月、京都行きとかぶってるじゃんということにさっき気づいた。というわけで次回は初の欠席になりますな。&lt;/p&gt;
</description><pubDate>Mon, 25 Oct 2010 20:32:29 +0900</pubDate><category>Haskell</category></item><item><title>Real World Haskell 26章</title><link>http://blog.kzfmix.com/entry/1288005586</link><description>&lt;p&gt;ブルームフィルター&lt;/p&gt;

&lt;p&gt;&lt;div class="awsxom"&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873114233/ref=nosim/kaerutyuuihou-22"&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/51rAJvgAkgL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
&lt;strong&gt;Real World Haskell―実戦で学ぶ関数型言語プログラミング&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
Bryan O'Sullivan,John Goerzen,Don Stewart &lt;br /&gt;
オライリージャパン / ￥ 3,990 ()&lt;br /&gt;
在庫あり。&lt;br /&gt;
&lt;br clear="all" /&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;3,4日かけて一応buildまではしたが、テストとか動かしてない。いまいち理解も追いついてなかったのが心残りだが、一通り読み終わったのでよしとしよう。それにしてもこの本はPerl的には「続・はじめてのPerl」くらいのレベル？「実用 Perlプログラミング 第2版」ではないでしょうなぁと。 &lt;/p&gt;

&lt;p&gt;みなさんこの先どうやって進んでいくんだろう？超気になるところ。&lt;/p&gt;

&lt;p&gt;一周目は&lt;a href="http://blog.kzfmix.com/entry/1286536472"&gt;15章以降がほとんど理解できなかった&lt;/a&gt;けど、今回読んだら結構理解できたのでよかった。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.kzfmix.com/images/blog/1288005286.jpg" alt="1288005286" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.haskell.shizu-dev.org/"&gt;プログラミングHaskell読書会&lt;/a&gt;にでて、問題もきちんと解いたってのも良かったのかも。&lt;/p&gt;

&lt;p&gt;&lt;div class="awsxom"&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274067815/ref=nosim/kaerutyuuihou-22"&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/41pybn9bpCL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
&lt;strong&gt;プログラミングHaskell&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
Graham Hutton &lt;br /&gt;
オーム社 / ￥ 2,940 ()&lt;br /&gt;
在庫あり。&lt;br /&gt;
&lt;br clear="all" /&gt;
&lt;/div&gt;&lt;/p&gt;
</description><pubDate>Mon, 25 Oct 2010 20:25:47 +0900</pubDate><category>Haskell</category><category>RWH</category></item><item><title>美しきかな、並列</title><link>http://blog.kzfmix.com/entry/1287700516</link><description>&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1287662197"&gt;Real World HakellのSTMの章がなんか消化不良だった&lt;/a&gt;のでなんかないかなぁと探したら、ビューティフルコードにSTMの章があったのを思い出したので、早速読んだ。&lt;/p&gt;

&lt;p&gt;ちなみに英語のはここ&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://research.microsoft.com/en-us/um/people/simonpj/papers/stm/beautiful.pdf"&gt;Beautiful concurrency&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;サンタクロース問題わかりやすい。ついでに動かしてみたけどControl.Monadもインポートしないと動かない@GHC6.12.3&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;module Main where
import Control.Concurrent.STM
import Control.Concurrent
import Control.Monad
import System.Random

meetInStudy :: Int -&amp;gt; IO ()
meetInStudy id = putStr ("Elf " ++ show id ++ " meeting in the study\n")

deliverToys :: Int -&amp;gt; IO ()
deliverToys id = putStr ("Reindeer " ++ show id ++ " delivering toys\n")

helper1 :: Group -&amp;gt; IO () -&amp;gt; IO ()
helper1 group do_task = do
  (in_gate, out_gate) &amp;lt;- joinGroup group
  passGate in_gate
  do_task
  passGate out_gate

elf1, reindeer1 :: Group -&amp;gt; Int -&amp;gt; IO ()
elf1      gp id = helper1 gp (meetInStudy id)
reindeer1 gp id = helper1 gp (deliverToys id)

data Gate = MkGate Int (TVar Int)

newGate :: Int -&amp;gt; STM Gate
newGate n = do { tv &amp;lt;- newTVar 0; return (MkGate n tv)}

passGate :: Gate -&amp;gt; IO ()
passGate (MkGate n tv) = atomically (do n_left &amp;lt;- readTVar tv
                                        check (n_left &amp;gt; 0)
                                        writeTVar tv (n_left-1))

operateGate :: Gate -&amp;gt; IO ()
operateGate (MkGate n tv) = do
  atomically (writeTVar tv n)
  atomically (do {n_left &amp;lt;- readTVar tv; check (n_left == 0)})


data Group = MkGroup Int (TVar (Int, Gate, Gate))

newGroup :: Int -&amp;gt; IO Group
newGroup n = atomically ( do g1 &amp;lt;- newGate n
                             g2 &amp;lt;- newGate n
                             tv &amp;lt;- newTVar (n, g1, g2)
                             return (MkGroup n tv))

joinGroup :: Group -&amp;gt; IO (Gate, Gate)
joinGroup (MkGroup n tv) 
    = atomically (do (n_left, g1, g2) &amp;lt;- readTVar tv
                     check (n_left &amp;gt; 0)
                     writeTVar tv (n_left-1, g1, g2)
                     return (g1,g2))

awaitGroup :: Group -&amp;gt; STM (Gate, Gate)
awaitGroup (MkGroup n tv)
    = do (n_left, g1, g2) &amp;lt;- readTVar tv
         check (n_left == 0)
         new_g1 &amp;lt;- newGate n; new_g2 &amp;lt;- newGate n
         writeTVar tv (n,new_g1,new_g2)
         return (g1, g2)

randomDelay :: IO ()
randomDelay = do
  waitTime &amp;lt;- getStdRandom (randomR (1, 1000000))
  threadDelay waitTime

elf :: Group -&amp;gt; Int -&amp;gt; IO ThreadId
elf gp id = forkIO (forever (do {elf1 gp id; randomDelay}))

reindeer :: Group -&amp;gt; Int -&amp;gt; IO ThreadId
reindeer gp id = forkIO (forever (do {reindeer1 gp id; randomDelay}))

santa :: Group -&amp;gt; Group -&amp;gt; IO ()
santa elf_gp rein_gp = do
  putStr "--------------------------\n"
  choose [(awaitGroup rein_gp, run "deliver toys"), (awaitGroup elf_gp, run "meet in my study")]
  where
    run :: String -&amp;gt; (Gate, Gate) -&amp;gt; IO ()
    run task (in_gate, out_gate) = do
                         putStr ("Ho! Ho! Ho! let's " ++ task ++ "\n")
                         operateGate in_gate
                         operateGate out_gate

choose :: [(STM a, a -&amp;gt; IO ())] -&amp;gt; IO ()
choose choices = do act &amp;lt;- atomically (foldr1 orElse actions)
                    act
    where 
      actions :: [STM (IO ())]
      actions = [do {val &amp;lt;- guard; return (rhs val)} | (guard, rhs) &amp;lt;- choices ]

main = do
  elf_group &amp;lt;- newGroup 3
  sequence_ [ elf elf_group n | n &amp;lt;- [1..10]]
  rein_group &amp;lt;- newGroup 9
  sequence_ [reindeer rein_group n | n &amp;lt;- [1..9]]
  forever (santa elf_group rein_group)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;で、なんでputStrLn使わないのかなぁとか思いつつ、自分でputStrLn使って書いたコードを実行したら&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;--------------------------
Ho! Ho! Ho! let's deliver toys
Reindeer 4 delivering toys
Reindeer 6 delivering toysReindeer 5 delivering toysReindeer 7 delivering \
toysReindeer 2 delivering toysReindeer 3 delivering toysReindeer 9 \
delivering toysReindeer 8 delivering toysReindeer 1 delivering toys
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;みたいに文字が出力された後に改行がずらずら出力されることがある。&lt;/p&gt;

&lt;p&gt;あー！と思ってソースを見たら&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;putStrLn        :: String -&amp;gt; IO ()
putStrLn s      =  do putStr s
                      putChar '\n'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;という定義だった。というわけで、putStrじゃないといけない理由がわかった。&lt;/p&gt;

&lt;p&gt;&lt;div class="awsxom"&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113636/ref=nosim/kaerutyuuihou-22"&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/41P9jjFbtDL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
&lt;strong&gt;ビューティフルコード&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
Brian Kernighan,Jon Bentley,まつもとゆきひろ &lt;br /&gt;
オライリージャパン / ￥ 3,990 ()&lt;br /&gt;
在庫あり。&lt;br /&gt;
&lt;br clear="all" /&gt;
&lt;/div&gt;&lt;/p&gt;
</description><pubDate>Fri, 22 Oct 2010 07:35:52 +0900</pubDate><category>Haskell</category></item></channel></rss>
