プログラミングHaskell 第2版(電子書籍)

プログラミングHaskell 第2版(電子書籍)

通常価格 ¥3,000(税込¥3,300) 特別価格

  • PDFのみの提供です

プログラムが、手続きでなく、関数と型に見えてくる

  • Graham Hutton 著、山本和彦 訳
  • 328ページ
  • A5判
  • ISBN:978-4-908686-07-8
  • 2019年8月2日 第1版第1刷 発行
  • 翻訳者による補足情報があります(リンク
  • 正誤情報

Haskellは、1990年に誕生した歴史あるプログラミング言語です。強力な型推論を備えた、静的型付きで遅延評価の純粋関数型言語として知られています。Haskellを知ることは、こうした概念の背景にある計算機の理論を知り、それが実際のプログラミングにどのような効果を及ぼすかを知ることでもあります。

本書では、さまざまな例題をとおして、関数の組み合わせによりプログラムを自在に構築する力を身に着けられます。

そして、その抽象化を支える型と型クラスについて知り、アプリカティブやモナド、Foldable、Traversableといった型クラスによって整理された現代のHaskellプログラミングの姿を学べます。

さらに、プログラムを手続きではなく宣言として書くことの利点のひとつとしてプログラムの論証を体験し、その応用として、ソース言語の仕様からコンパイラーを算出するという高度な例題に挑戦します。

本書の原書にあたるのは "Programming in Haskell, 2nd Edition" です。

執筆者紹介

Graham Hutton(原著者)

Nottingham 大学コンピューターサイエンス学部教授。
Haskell を何千人もの学生に教えてきた講師として数々の受賞歴を持つ。“Journal of Functional Programming” の編集委員、Haskell Symposium およびICFP(International Conference on Functional Programming)の議長、ACM(Association for Computing Machinery)プログラミング言語分科会の副議長を務め、現在はACM Distinguished Scientist。

山本和彦(訳者)

株式会社IIJ イノベーションインスティテュートに所属するプログラマー。Haskell コミュニティーでは、主にネットワークプロトコル関連のライブラリを開発保守している。

目次

第I部 基礎概念
第1章 導入
 1.1 関数
 1.2 関数プログラミング
 1.3 Haskell の特徴
 1.4 歴史的背景
 1.5 Haskell の妙味
 1.6 参考文献
 1.7 練習問題
第2章 はじめの一歩
 2.1 GHC
 2.2 インストールして利用開始
 2.3 プレリュード
 2.4 関数適用
 2.5 Haskell プログラム
 2.6 参考文献
 2.7 練習問題
第3章 型と型クラス
 3.1 基礎概念
 3.2 基本型
 3.3 リスト型
 3.4 タプル型
 3.5 関数型
 3.6 カリー化された関数
 3.7 多相型
 3.8 多重定義型
 3.9 基本クラス
 3.10 参考文献
 3.11 練習問題
第4章 関数定義
 4.1 古きから新しきへ
 4.2 条件式
 4.3 ガード付きの等式
 4.4 パターンマッチ
 4.5 ラムダ式
 4.6 セクション
 4.7 参考文献
 4.8 練習問題
第5章 リスト内包表記
 5.1 基礎概念
 5.2 ガード
 5.3 関数zip
 5.4 文字列の内包表記
 5.5 シーザー暗号
 5.6 参考文献
 5.7 練習問題
第6章 再帰関数
 6.1 基礎概念
 6.2 リストに対する再帰
 6.3 複数の引数
 6.4 多重再帰
 6.5 相互再帰
 6.6 再帰の秘訣
 6.7 参考文献
 6.8 練習問題
第7章 高階関数
 7.1 基礎概念
 7.2 リスト処理
 7.3 畳込関数foldr
 7.4 畳込関数foldl
 7.5 関数合成演算子
 7.6 文字列の二進数変換器
 7.7 投票アルゴリズム
 7.8 参考文献
 7.9 練習問題
第8章 型と型クラスの定義
 8.1 type による型宣言
 8.2 dataによる型宣言
 8.3 newtypeによる型宣言
 8.4 再帰型
 8.5 型クラスとインスタンスの宣言
 8.6 恒真式検査器
 8.7 抽象機械
 8.8 参考文献
 8.9 練習問題
第9章 カウントダウン問題
 9.1 導入
 9.2 算術演算子
 9.3 数式
 9.4 組み合わせ関数
 9.5 問題の形式化
 9.6 総当たり法
 9.7 性能テスト
 9.8 生成と評価の方法を変える
 9.9 代数的な性質をいかす
 9.10 参考文献
 9.11 練習問題

第II部 高度な話題
第10章 対話プログラム
 10.1 課題
 10.2 解決策
 10.3 基本アクション
 10.4 順序付け
 10.5 アクションの部品
 10.6 ハングマン
 10.7 ニム
 10.8 ライフ
 10.9 参考文献
 10.10 練習問題
第11章 負けない三目並べ
 11.1 導入
 11.2 基本的な宣言
 11.3 格子に関する便利な関数
 11.4 格子を表示する
 11.5 手を決める
 11.6 番号を読み込む
 11.7 人間 vs 人間
 11.8 ゲームの木
 11.9 枝を刈る
 11.10 ミニマックス法
 11.11 人間 vs コンピューター
 11.12 参考文献
 11.13 練習問題
第12章 モナドなど
 12.1 関手
 12.2 アプリカティブ
 12.3 モナド
 12.4 参考文献
 12.5 練習問題
第13章 モナドパーサー
 13.1 パーサーとは何か?
 13.2 関数としてのパーサー
 13.3 基礎的な定義
 13.4 パーサーの連接
 13.5 選択
 13.6 派生関数
 13.7 空白の扱い
 13.8 数式
 13.9 計算器
 13.10 参考文献
 13.11 練習問題
第14章 Foldable とTraversable
 14.1 モノイド
 14.2 Foldable
 14.3 Traversable
 14.4 参考文献
 14.5 練習問題
第15章 遅延評価
 15.1 導入
 15.2 評価戦略
 15.3 停止性
 15.4 簡約の回数
 15.5 無限のデータ構造
 15.6 部品プログラミング
 15.7 正格適用
 15.8 参考文献
 15.9 練習問題
第16章 プログラムの論証
 16.1 等式変形
 16.2 Haskell の等式推論
 16.3 簡単な例題
 16.4 自然数に対する数学的帰納法
 16.5 リストに対する構造的帰納法
 16.6 連結を除去する
 16.7 コンパイラーの正しさ
 16.8 参考文献
 16.9 練習問題
第17章 コンパイラーの算出
 17.1 導入
 17.2 文法と意味
 17.3 スタックの追加
 17.4 継続の追加
 17.5 脱高階関数
 17.6 算出の短縮
 17.7 参考文献
 17.8 練習問題

付録A 解答の一部

付録B 標準的なモジュール

参考文献

索引