簡約 λカ娘 巻の七 (C86)

いま何月だと思ってるんだよ,という感じですが(明日から10月です),サークル「参照透明な海を守会」のメンバーとしてC86に参加してました.頒布した新刊は簡約 λカ娘 巻の七と,今までの1~6号の総集編である簡約!? λカ娘 – 始まりの総集編でした.

<簡約 λカ娘 巻の七> 内容紹介
第1章 ATS言語 string ライブラリ探訪
第2章 Haskellで状態を扱う←私の記事です
第3章 【新編】 加速しなイカ? 【叛逆の物語】
第4章 ご注文は依存型ですか?

『Haskellで状態を扱う』 内容紹介
C84の『簡約!? λカ娘 Go!』に私が書いた『殺物語』でも状態モナドについては軽く触れましたが,それが自己関手であることに軽く触れた程度であり,モナドであることの説明もできませんでした.今回はもう少し丁寧に状態モナドについて,圏論に基づいてその仕組を解説してみました.ただし,原理的な事柄の解説に終始しており,状態モナドをうまく使う,というような事には触れていません.

想定した読者
参照透明性を基礎とするHaskellの世界でどうして状態を扱えるのか,そして状態を扱うハックの裏にはどのような代数的な原理があるのか,そんなことに興味を持つ読者を想定しています.

表紙
今回はイラストレーターの馬三朗 叉吉先生に依頼しました.おかげでたいへん素敵な本になりました.

今後の『簡約 λカ娘 巻の七』の入手
まだ本は残っているのですが,委託に出すかどうかも含めて色々未定です.

広告

簡約!? λカ娘 Go! (C84)

C84の三日目(2013/08/12(月))に、サークル「参照透明な海を守る会」から『簡約!? λカ娘 Go!』が出ます。C82の『簡約!? λカ娘(算)』に引き続き、この本にも記事を書かせて頂きました。元々はこの一つ前のC83(2012年冬)のために用意していた記事ですが、諸事情により期限までに書くことができませんでした。今回の記事は去年の冬のために用意していた原稿に大幅に書き足して完成させたものです。

<簡約!? λカ娘 Go!> 内容紹介
第1章 めたせぴ☆ふぁうんでーしょん
第2章 jhcコピペ
第3章 侵略者と転校生とアイドルとイカが再帰を学ぶそうですよ!
第4章 殺物語  ←私の記事です
第5章 λカ娘探索?
第6章 ロマンティック・パージング
第7章 HaskEll Shaddai

第四章の『殺物語』が私の記事です。ストーリー部分は『簡約!? λカ娘(算)』に書いた『蓮物語』の続編になっていますが、数学やプログラミングの話題に関する部分は、『蓮物語』を読んでいなくても問題なく読めるように書いてあります。

『殺物語』 内容紹介
Haskellや圏論についてある程度理解している「私」が、モナドについて質問しにきた下級生に説明する話です。内容をもう少し具体的に要約すると、圏を導入し、Haskellの圏Haskを導入し、その上でKleisli圏に関連付けてモナドを説明しています。圏論は自然変換のあたりまで説明しています。こう要約すると短い記事になりそうなものだと思えてくるのですが、会話形式で書いたためか予想外にページが増えました(約50ページ)。圏Haskを圏論の議論の動機付けや理由付けとしてとりあげ、圏論を学ぶ際の「例が簡単すぎるか(数学的な前提知識が)高度すぎるかのどちらかになりがち」というハードルをいくらかでも緩和しようと試みています。

想定した読者
C82の『簡約!? λカ娘(算)』に私が書いた『蓮物語』は、数学科の平均的な大学二年生に期待されている程度の理解力を持つ「僕」が、はじめてHaskellと圏論に触れ、Haskellのアプリカティブファンクターの振る舞いを理解しようとする話でした。これはこれで一貫した姿勢で書いたものであり、自分では気に入っています。しかし、わかりにくいという読者も多かったようです。プログラミングという話題そのものが特殊ですから、誰にもわかる、というのはそもそも望むべきではないかもしれませんが、もう少し多くの人に理解してもらえる記事を書きたくなりました。反省してみると『数学科の平均的な大学二年生に期待されている程度の理解力を持つ「僕」』のあたりがハードルを高くしていたらしいので、今回は読者に要求する数学のレベルをやや下げました。そのかわりにHaskellの入門書(具体的には『すごいHaskellたのしく学ぼう!』ぐらいの本)を一冊はなんとなく読んだ、というぐらいのレベルの理解を前提としました。

なんでタイトルがモナドと関係無さそうな『殺物語』なの?
数学やプログラミングとは関係ない理由です。前回の『蓮物語』は、西尾維新の『化物語』の二次創作という体裁になっていました。『化物語』の主人公である阿良々木暦は原作でも数学が得意だという設定なので、『数学ガール』の「僕」の役割を果たすのに丁度良かったのです。タイトルはHaskellから取って『蓮物語』に決めていましたが、Haskellだから蓮、という以外に何か欲しくなり、記事を書いたときに大流行していた(そしてまだ流行している)近未来を舞台にしたサイバーパンクニンジャ活劇小説『ニンジャスレイヤー』の主役を改変した「ハスケルスレイヤー」を登場させました。本家の主人公・ニンジャスレイヤーのメンポ(面頬)に「忍」「殺」と刻まれているのが印象的だったので、ハスケルスレイヤーのメンポには「蓮」「殺」と刻まれていることにしました。『蓮物語』では構成上、いきなり出てきていきなり倒されるキャラクターだということもあり、『ニンジャスレイヤー』の主人公そのものを登場させたくはなかったというのも改変キャラにした理由です。というわけで、『蓮物語』の続編であることから、ハスケルスレイヤーのメンポの二文字目「殺」をタイトルに入れました。

☆追記(2013/08/24) 若干の誤記がありました。お詫びと訂正→『殺物語』 正誤表

他の記事について
『簡約!? λカ娘 Go!』は全部で168ページもあります。あまり薄い本じゃない感じですね。執筆者による自記事紹介がすでにいくつかあります:

“簡約!? λカ娘 Go!”の紹介とAjhcプロジェクト近況
簡約!? λカ娘 Go!に「きつねさんでも分かるLR構文解析」書きました

以下、いくつかの記事について簡単な紹介をします。自分が書いた記事以外はどれも「ちゃんと理解できていない」ので、自分の理解の程度に応じた紹介となります。ご了承ください。

第1章 めたせぴ☆ふぁうんでーしょん
あまり有名ではありませんが、jhcというHaskellコンパイラが存在します。著者の @master_q さんはこのコンパイラに非常に強い関心を持ち、UnixライクなフリーOSをHaskellで実装するという野心的なプロジェクトを立ち上げています。野心的、というのは少々の工夫で片付くレベルではないからです。しかしながら、まったく無謀な試みというわけでもないことが、今回の @master_q さんの記事を読めばわかるかもしれません。記事の著者の @master_q さんは組み込み系の仕事をなさっていた方で、デバイスドライバのようなものを書くために必要な kernel ドメインでのプログラミングに強く型付けされた言語を使えないかと数年間考え(過去に @master_q さんが『λカ娘』に書いた記事の全てにこのような問題意識が関わっています)、スナッチ設計というアプローチにたどり着きました。このスナッチ設計が上手く行けば、漸進的にUnixライクなOSをHaskellでリライトでき、めでたく kernel ドメインのプログラミングに強く型付けされた言語を使えるはずです。この記事の議論の詳細を理解するためには低レイヤの部分で何が起こっているかをよく知っている必要があると思います。(というわけで、私には議論の細部を理解することができませんでした。)

タイトルに含まれる「ふぁうんでーしょん」は『銀河帝国興亡史』という通称で親しまれているアイザック・アシモフの有名な未来史のSFシリーズに由来します。『銀河帝国興亡史』は、統計力学と心理学を合わせたような「歴史心理学」を発展させた数学者ハリ・セルダンが銀河帝国の崩壊を予見し、帝国の崩壊後の文明再生の核となる組織「ファウンデーション」を作るところから話が始まります。(型付けが弱い)C言語を基礎としたUnix帝国の崩壊後の、kernelレベルプログラミング再生のための礎を築こうという意気込みが反映されたタイトルです。

第3章 侵略者と転校生とアイドルとイカが再帰を学ぶそうですよ!
リストのように、型そのものが再帰的な構成によって定義される事があります。このような構成を一般化したものとして、再帰スキームというものがあるのだそうです。このような再帰スキームが、たとえば foldr のような再帰関数の高レベルな一般化であることや、再帰スキームを利用して型を定義したときにテストをする方法などが紹介されています。

第4章 殺物語
「——それで翼さん、Haskell のモナドって何でそんなにすごいんですか?」
突然の訪問者は、忍野扇だった。圏論とモナドの解説のあと、忍者が出て殺す!

第5章 λカ娘探索?
囲碁というゲームがありますね。見かけはよく似ている(?)オセロなどと違い、囲碁をコンピュータで解析するのは難しいのだそうです。この記事では囲碁を解析するためになされてきたいくつかの工夫が解説されています。

第6章 ロマンティック・パージング
コンパイラの教科書には LL だとか LR だとか LALR のような術語が登場します。そんなわけで、コンパイラの授業を受けた人はこれらの用語やオートマトンについてよく知っていることが期待されるわけです。現実には、これらの話はなかなか面倒で、ただ本を眺めているだけでは身につきません。(身につきませんでした。)この記事では二人(二匹?)のきつねさんが会話しながらLR構文解析について勉強します。きつねでもわかるのだから人間である自分にもわかるはずだ、そんな希望と期待を抱かせてくれる記事です。

第7章 HaskEll Shaddai
オブジェクト指向プログラミングでは、しばしば個々のオブジェクトの属性を setter/getter 関数で読み書きします。このようなプログラミングスタイルは、オブジェクトが状態を持つ事を前提としています。したがって、参照透明性を基礎とするHaskellで setter/getter のようなものを書くには工夫が必要です。Lensはそのような工夫の一つです。この記事の著者である@fumieval さんのブログ記事『Freeモナドでゲームを作ろう!第2回: 本当に動かす 』でもこのLensについての概観が与えられていますが、『HaskEll Shaddai』ではもう少し深く掘り下げて機能が説明されており、Webスクレイピングのサンプルなどが与えられています。

表紙
今回は、表紙の絵も書かせて頂きました:
pixiv: λカ娘c84表紙絵  簡約!? λカ娘 Go!
表紙絵は裏表ひとつづきになっています。

C82に参加してきました/関数型イカ娘本#4を書かなイカ!!

 2012/08/12のことですから少し前の話なのですが C82(コミックマーケット82)に,サークル「参照透明な海を守る会」のメンバーとして参加してきました (http://www.paraiso-lang.org/ikmsm/books/c82.html). 今回は表紙だけでなく,記事を一本書きました. (上記リンクページにて本のサンプル PDF を見ることができます.)

想定した読者
 理工系の学部教養で習ったであろう集合と写像の簡単な知識を持つ人です. 関数型言語,特に Haskell への関心がある方を読者として想定しましたが,それ以上の知識を想定はしないようにしました. (何より,私自信が言語の深い理論を知らず, Haskell についても初心者なので書こうとしてもそんなに難しい話は書けません).

記事「蓮物語」の概要と目的
 記事冒頭からそのまま引用します.

 集合と写像について一応のことを知ってはいるけれど関数型言語に触れたことがない主人公が Haskell を学びます。同時に主人公は圏論の初歩を学び、圏論を応用すると Haskell の幾つかの重要な型クラスの挙動が理解しやすくなることを知ります。物語を通し、主人公は最小限の圏論の知識を手がかりに Haskell の型を理解しようと試行錯誤することになります。

 このような話題をきちんと論じるならば、集合と写像のなす圏を圏論の立場で丁寧に抽象化してから論じることになるでしょう。とはいうものの、圏論をゼロから学び cartesian closed category のあたりまで進めるのはなかなか大変です。そこまで徹底した抽象化を前提としなくてもHaskellと圏論の関わりを説明することはある程度可能だと筆者は考えました。物語を通して、圏論についての初歩的な知識を紹介し、 Haskell の幾つかの重要な型クラスが従うルールを圏論の立場から説明します。

感想
 久々に院生時代の論文執筆なみに呻吟することになったのですが,こういう機会でも無ければ深く掘り下げて勉強することもできないので,参加して良かったと思います. サークルメンバーの多くとは Twitter でも会話できるのですが, Skype のグループでのチャットは文字制限も緩いし場外からのトビゲリ・アンブッシュの心配もなく和気あいあいと話をすることができたので非常に楽しかったです. 

関数型イカ娘本#4を書かなイカ!!
 さてどちらかというとこちらが本題なのですが,C83(当落はまだわかりません)を前提として関数型イカ娘の四冊目の本を企画中です. そんなわけで執筆者募集中です. 最終原稿作成や印刷依頼などの都合上2012/11/18(日)深夜が締め切りです. 

 サークルメンバーの皆さんは(私をのぞいて)皆スゴイ級の人たちですが,元々こういうノリで始まったサークルということもあり,内容の高度さよりは妄想の濃さを歓迎するようなサークルなので,是非お気軽に参加ください. 「すごい Haskell たのしく学ぼう ! 」の訳者のお二人(@tanakh さん,@nushio さん)とも Skype でチャットできますよ!