初心者のための関数型λカ娘入門

2014-12-09 技術書

お前たち! 今日も元気にβ簡約してるでゲソか!?
今日は参照透明な海を守る会さんの「簡約! λカ娘」シリーズについて、初めて読む際に読みやすいオススメ記事を挙げていくでゲソ。

「簡約! λカ娘」はHaskellをメインにした関数型の話題のオムニバス本で、基礎的な解説からぶっ飛んだネタ記事まで、カオスに詰めあわされているのが特徴の同人誌でゲソ。
章立てになってはいるもののオムニバスなので相互の関連はあまりなく、興味のあるところから読み進められるようになっているでゲソ。
ちなみに総集編は薄い本だけど分厚くて、500円玉の直径より分厚いでゲソ。

そんな関数型λカ娘でゲソが、章ごとにテーマや難易度がまちまちで、なおかつどこからでも読めてしまうせいで、逆にHaskell力が低いとどこから読めばいいのかわからなくなってしまう魔性の本でもあるのでゲソ。
そこで今回、とりあえずざっくり通読して「初学者が読みやすい」と感じた記事を上げて、λカ娘信者を増やしていきたい所存でゲソ。

”>ちなみに現時点で1~6巻までをまとめた簡約!? λカ娘 – 始まりの総集編は在庫切れで手に入らず、最新刊の簡約 λカ娘 巻の七はそもそも委託販売がないようでゲソ。
総集編在庫復活したみたいでゲソ!
また巻の七も委託されたでゲソ!
簡単に手に入るようになって素晴らしいじゃなイカ!

じゃあこの記事は役立たずなんじゃなイカ!?
と思われそうでゲソが、実はうちの会社の本棚にはこの2冊が我が物顔で鎮座しているのでゲソ!
そう、本棚をλカ娘本が侵略しているのでゲソ! すごくなイカ?

そんなわけで、ぶっちゃけこの記事は社内のHaskell勉強会で興味を持って「せっかくだしλカ娘本もちょっと読んでみようかー」と思った同僚向けでゲソ。
あと、もしかしたら既に購入したものの頭から読んで挫折して積ん読になってる人とかいるかもしれないし、そのうち再販されるかもしれないので、そんな時のために記事として残しておくことにするでゲソ。

本記事ではHaskellの文法事項をある程度知っているが、Haskellを使い込んではおらず、また圏論やモナドなどの理論的基礎までは踏み込んでいないような読者を想定しているでゲソ。
よって取り上げる記事も理論的な基礎固めや簡単な応用に絞っていることに留意して欲しいでゲソ。
もちろんイカで取り上げる以外にも面白いトピックが多いので、慣れてきたら色々読んでみると良いのでゲソ。
それでは、順番に挙げていくでゲソ。
あ、ちなみに巻数を指定していない場合は「始まりの総集編」の章番号を差すでゲソ。

第1章 β簡約!λカ娘

まずは一番最初の章でゲソ。
テーマはλ計算とSKI計算の入門になっており、λ計算について知らない人でも読みやすくなっているでゲソ。
特にλ計算はLispの基礎になっているし、チューリングマシンと双璧をなす定番の計算モデルなので、知っておいて損はないんじゃなイカ?
SKI計算もλ計算ほどではないものの有名な計算モデルであることと、λ計算より単純なモデルであることから数学的理論では非常に有用でゲソ。
Haskellとはそこまで関係ないものの、関数型プログラミングを行う上での基礎知識として真っ先に読んでおくべき章といえるでゲソ。

ちなみに続く第2章「数を作らなイカ?」では、第1章の知識を下敷きに、チャーチ数を表すSKI式をHaskellで生成する、というテーマを取り上げているでゲソ。
ちょっと踏み込んだ内容なので今回のオススメ記事からは外したでゲソが、興味を持った人は合わせて読んでみるといいんじゃなイカ?

第10章 関数型イカガール第3話

いきなり飛んで、次にオススメなのは第10章でゲソ。
この章のテーマは圏論の必要性についてでゲソ。
正直圏論の基礎を学んでないと話の展開にちょっとついていけないので、この章より先に第12章「蓮物語」を読んでおくのがオススメでゲソ。
とはいえ、「なぜHaskellで圏論が重要なのか」という、初学者が一度は持つであろう疑問に対する一つの答えになっており、理解のハードルは決して高くはないのでゲソ。
そんなわけで、やはり初心者にこそお勧めの記事なんじゃなイカ?

なお第3話というタイトルから分かるとおり、この章は第3章「関数型イカガール」の続きでゲソ。(第3章に1話と2話がまとめて掲載されているでゲソ)
ストーリー性はほとんどないので第3話だけでも独立して読めるし、第3章で取り扱う内容が若干高度なので、初学者はいったん第3章を飛ばすのがオススメでゲソ。
色々な知識が付いた後に戻ってきて読んだほうが、楽しさもひとしおなのでゲソ。

第12章 蓮物語

続いて、物語シリーズを下敷きにした第12章でゲソ。
この章のテーマは、ずばりHaskellと圏論の基礎でゲソ。
関数や型から始まり、型クラス、圏論、ファンクター、アプリカティブファンクターと、Haskellを扱う上で基礎となる概念を阿良々木くんの視点を通して学ぶことが出来るんでゲソよ。
決してさらっと流し読みして理解できる内容ではないでゲソが、独学でも十分読み解けるようまとまっているし、頑張って読んでおくとタメになるでゲソ。

前の節にも書いてるでゲソが、第10章より先にこちらを読んでおくのがオススメでゲソ。
というか、他の章では圏論や可換図式が前提知識として扱われることも多いので、ぶっちゃけ他の章を放っておいてこの章から読み始めるのが一番いいんじゃなイカ?

ちなみにこの章の続きが26章「殺物語」になるでゲソ。
後ほど改めて紹介するでゲソが、こちらはモナドの入門記事になっていてやっぱりオススメじゃなイカ!

第16章 愚者のコントロール

この章のテーマはHaskellでのメモ化についてでゲソ。
フィボナッチ数列のメモ化を題材に、複数のメモ化手法について言及しているでゲソ。
なお内容は氷菓の二次創作になっており、えるたそがかわいいでゲソ。
ストーリーラインもきっちり氷菓の筋をなぞっていて面白く、なおかつHaskellの勉強にもなる素晴らしい章じゃなイカ?

なお若干ネタバレになるでゲソが、この章を読むための基礎知識としてモナドを知っておくことが望ましいでゲソ。
そういう意味で、26章「殺物語」を先に読んでからこちらを読むのがオススメじゃなイカ?

第26章 殺物語

一気に10章飛ばして26章でゲソ。
この章は第12章「蓮物語」の続きで、モナドの基礎について扱っているでゲソ。
Haskellと言ったらモナド、モナドと言ったらHaskellみたいなイメージがあるでゲソが、実際Haskellはどのように圏論と結びついているのか、単にHaskellでプログラムを書くだけではわからなくなイカ?
この章を読めば、どのような理論的背景を下敷きにHaskellの圏が構築されているかを知ることが出来るのでゲソ。

内容としては少し難しいのでゲソが、多少読み飛ばしてでも目を通して欲しいのでゲソ。
そのくらいの価値はあると思うでゲソ。

以上が比較的読みやすく、入門者にとってタメになりそうだと個人的に感じた章のまとめでゲソ。
繰り返しになるでゲソが、この他にも面白い記事や読みやすい記事はあるので、これに囚われず面白そうだと思った章を適当に読んでみて欲しいでゲソ。
上記以外で比較的読みやすいと感じたのは

  • 第9章 Java VM上でtail callしなイカ?
  • 第11章 映画けいさん!
  • 第14章 評価
  • 第15章 オール・アバウト・ケーゾク・イン・スキーム
  • 第17章 インターフェース
  • 第20章 OCamlでprintfじゃなイカ?
  • 第21章 Haskellでもprintfじゃなイカ?
  • 第28章 ロマンティック・パージング
  • 巻の七 第2章 Haskellで状態を扱う

辺りでゲソ。
特にJava VM上で動くScala, Clojure辺りの末尾呼び出し最適化が難しい理由が分かる第9章、様々な評価戦略が分かる第14章、継続という重要な概念が分かる15章、基本的な構文解析であるLR法が分かる28章辺りが実用的な知識も身についていいんじゃなイカ?

というわけで、みんな関数型λカ娘を読もうじゃなイカ!
そして透明参照な海を守るのでゲソ!