問題を適切な大きさに分解するスケーラブルな手法
ファンクション+アクション=プログラム
【関数型プログラミングのススメ】
|
|
金谷 一朗 著
2011年 9月17日発売
A5判
216ページ
定価 \2,090(本体 \1,900)
|
ISBN978-4-7775-1630-8 C3004 \1900E
|
|
こんにち、プログラマーが解くべき問題は、指数関数的に大きくなってきている。一方、人間の脳は、その速度では進化しない。
つまり、問題をスケーラブルに分解する方法(中ぐらいの問題を小さな問題に分解するのと同じ手法で、大きな問題を中ぐらいの問題に分解できる方法)が必要になってくる。
本書では、「関数型プログラミング」の解説を行なう。数学者たちが長年培ってきた方法が、「関数型プログラミング」なのである。「関数型プログラミング」は特定のプログラミング言語に基づく思考法ではないから、本書でもさまざまな言語を用いる。中には親しみ深い言語もあるだろうし、初めて見る言語もあるかもしれない。しかし、その背後にある数学は、一貫している。本書を通して「関数型プログラミング」という精神に触れてもらいたい。
|
|
■ 主な内容 ■ |
はじめに
[1.1] 本書で述べること |
[1.2] 本書で述べないこと |
[1.3] 本書の構成 |
|
第2章
|
「関数型プログラミング」ひとめぐり【C・Scheme・Haskell】
|
[2.1] 「関数型プログラミング」への道 |
[2.2] 単純な例 |
[2.3] なぜ「関数型プログラミング」がいいのか?(参照透過性) |
[2.4] 「関数型プログラミング」を強くサポートする言語 |
[2.5] 型システム |
|
第3章
|
「ラムダ記法」と計算の本質【JavaScript・Python・Ruby】
|
[3.1] ラムダ記法 |
[3.2] 「プログラミング」における「ラムダ式」 |
[3.3] 計算の本質(チャーチ数) |
[3.4] カリー化 |
[3.5] クロージャ |
|
第4章
|
リスト【AWK・Make・シェルスクリプト】
|
[4.1] リストとタプル |
[4.2] リストを使った問題 |
[4.3] リストを使った問題の実装 |
[4.4] 実装の汎用化 |
[4.5] リストの中身 |
|
第5章
|
「条件分岐」と「ループ」【Haskell・Python・Scheme】
|
[5.1] 条件分岐 |
[5.2] ループ |
[5.3] イテレータ |
[5.4] フィルタ |
[5.5] マップと畳み込み |
|
[6.1] ツリー構造 |
[6.2] ツリーを使った問題 |
[6.3] 「ツリー」を使った問題の実装 |
[6.4] リスト内包表記 |
[6.5] 再び「畳み込み」と「マップ」 |
|
[7.1] Haskell言語 |
[7.2] 「純粋関数型」である意味 |
[7.3] パーサ(1) |
[7.4] パーサ(2) |
[7.5] パーサ(3) |
|
[8.1] I/Oと関数型プログラミング |
[8.2] アクション |
[8.3] モナド |
[8.4] 三たび単語を数える |
[8.5] 「文脈」としての「モナド」 |
|
第9章
|
関数型プログラミングを使わない方がよい場合
|
[9.1] イベント駆動【Objective-C】 |
[9.2] 継続【Scheme】 |
[9.3] マクロ【Common LISP】 |
[9.4] 例外【Java】 |
[9.5] 「自己書き換え」と「リフレクション」【C・JavaScript】 |
|
[10.1] 関数名を使わない再帰 |
[10.2] Zコンビネータ |
[10.3] Yコンビネータ |
|
[11.1] チューリング機械(BrainfuckとUnlambda) |
[11.2] 「C言語」と「ラムダ式」 |
[11.3] 「C++」の「関数オブジェクト」 |
[11.4] コールバック?ご冗談を。 |
[11.5] プログラミングの最後の砦 |
|
おわりに
参考文献
索引
※ 内容が一部異なる場合があります。発売日は、東京の発売日であり、地域によっては1〜2日程度遅れることがあります。あらかじめご了承ください。
|
|
|
|