ぱたへね!(出張所)

はてなダイアリーはrustの色分けができないのでこっちに来た

Real World Functional Programming: With Examples in F# and C#

Real World Functional Programming: With Examples in F# and C#読みました。
F#を使った関数型プログラミングと、.NETのライブラリを使ったプログラミングの合わせ技を学べる本です。タイトルにもある通り、一つのトピックに対して、C#とF#の両方のコードが示されています。前半はC#もF#も同じくらいの比率で出てきますが、後半はF#中心に書かれています。ページ数は多いですが、In C# 〜 から始まるセクションを完全にすっ飛ばせば、1/3くらいは読まずにすみます。

筆者が面白いと思うところだけ突っ込んで紹介している本なので、この一冊でF#を学ぶにはいろいろと足りない所が出てきます。プログラミング F#と合わせて読むと、上手く補完できるのでお勧めです。C#と.NETを意識している為か、ソースコードの雰囲気が他のF#本とは少し違います。関数呼び出しは全て()でくるむTuple渡しスタイルで、他の本ならパターンマッチングで書くような所でも、ifで書いてある事が多く感じました。

他のF#本に負けず劣らず、コラムが熱いです。OCamlは当然として、HaskellLispVisual Basic等の言語が登場します。Lispの本のように「全ての言語はLispに〜」みたいなのが無いのが良いです。他の言語を紹介するときもどちらが良いとも悪いとも言わず、決してF#が一番パワフルだとも言わず、控えめな感じがします。F#好きな人はプログラミング言語全部が大好きなんでしょう。実践 F# 関数型プログラミング入門の@igetaさんも、そのようなスタンスなのでF#は初心者に優しいです。(きりっ)

本の構成

本の構成は、手を動かしながら技を身につけていくスタイルです。私の好きなHigher-order Perlや、SICPと同じタイプです。一回読んだだけでは、分からないところも多く、難易度は高いと感じました。特にcomputation expressions(計算式)がよく分からないですが、他のF#本でもよく分からないので、この本がというよりはF#自体が難しいのだと思います。

他のF#本との違いは、最初から.NETのライブラリありきで話が進みます。他のF#本は、.NETライブラリを使うのは後半のトピックになっていて、それまではF# Interactiveにちまちま入力していく途中に力尽きてしまいます。この本では、サンプルアプリが最初からGUIで、初心者に取ってはモチベーションが持続しやすいです。内容に関しても、遅延評価、末尾再帰呼び出し、継続渡しスタイル、関数の部分適用等、関数型プログラミングで必要な知識が一通り紹介されています。対応するF#コードもあり、とてもわかりやすいです。私はこの本でLiftingというテクニックを覚えました。

作成するアプリケーションの例

7章では、XMLから文章の構造を読み取って画面に表示するための、簡単なレイアウトエンジンをF#で記述します。

そこに出てくるXMLと、画面への表示です。

<titled title="Functional Programming for the Real World" font="Cambria" size="18" style="bold">
<split orientation="vertical">
<split orientation="horizontal">
<text style="italic">
In this book, we'll introduce you to the essential concepts of functional programming, but thanks to the .NET Framework, we won't be limited to theoretical examples. We'll use many of the rich .NET libraries to show how functional programming can be used in the real world.
</text>
<image filename="..\..\Cover.jpg"/>
</split>
<titled title="Introduction" font="Times New Roman" size="14" style="bold">
<split orientation="horizontal">
<text>
Functional programming is a paradigm that is older than the first computers. The first functional programming language celebrated its 50 years in 2008, but for all those years, it existed mostly in academia. Functional languages are very succinct and expressible, yet everything is achieved using a minimal number of concepts. Despite their elegance, functional languages were never really used in mainstream.
</text>
<text>
In recent years, we're facing new technology challenges and trends that open the door to functional languages. There has never been a better time to learn them. We need to write programs that process large sets of data and scale to a large number of processors and computers. We want to write programs that can be easily tested and don't require us to explicitly specify all details about their execution.
</text>
</split>
</titled>
</split>
</titled>

XMLの読み込みにはSystem.Xml.Linq、レイアウトの表示にはSystem.Windows.Formsを使っています。

参考

出版社のWebから、2つの章が無料で読むことが出来ます。
http://www.manning.com/petricek/
4章はF#を使ってパイチャートを画面に表示します。12章はcomputation expressionsを使ったDSLっぽいLoggingシステムを構築します。1章〜3章は、関数型プログラミングの簡単な導入とF#の文法についてなので、少しでもF#のプログラミング経験があれば、4章は簡単に読めると思います。


この本の最後にお勧めの本が載っていたので紹介します。

F#関連では、次の4冊が紹介されています。

F# for ScientistsはF#のバージョンが古く、Amazonでは評価が割れています。F# in Actionは、残念ながら結局出版されていないようです。

私が一冊加えるならTiger bookを入れておきます。