序文
謝辞
日本語版のためのまえがき
監訳者まえがき
訳者まえがき
イントロダクション
Part 1 プログラミング言語とは
Chapter 1 歴代のプログラミング言語たち
1.1 プログラミング言語古生物学
1.2 最初のプログラミング言語
1.2.1 コンピュータがなかった時代のプログラミング
1.2.1 最初の現代的プログラミング言語
1.3 ALGOL
1.4 APL
1.5 BASIC
1.6 PL/I
1.7 Logo
1.8 Simula
1.9 Pascal
1.10 Prolog
1.10.1 家族関係のモデリング
1.10.2 フィボナッチ数列の実装
1.11 Smalltalk
1.11.1 Smalltalkの基本的な機能
1.11.2 レースを開催してみよう
1.12 Standard ML
1.13 本章のまとめ
Chapter 2 プログラミング言語の本質
2.1 プログラミング言語の定義
2.2 構文とセマンティクス
2.3 プログラミング言語の実装
2.3.1 トークン、字句解析器、構文解析器
2.3.2 インタプリタ
2.3.3 コンパイラ
2.3.4 バイトコードコンパイラ
2.4 データ型
2.4.1 プリミティブなデータ型
2.4.2 レコード
2.4.3 Pascalのレコード
2.4.4 C言語の構造体
2.5 データ構造
2.5.1 配列
2.5.2 連結リスト(リンクリスト)
2.5.3 木構造
2.5.4 ハッシュテーブル
2.6 変数とスコープ
2.6.1 レキシカルスコープ
2.6.2 ダイナミックスコープ
2.6.3 Python
2.6.4 C言語
2.6.5 SNOBOL
2.6.6 Perl
2.7 プログラムのフロー制御
2.7.1 非構造化言語
2.7.2 構造化言語
2.8 プログラミングパラダイム
2.8.1 命令型
2.8.2 オブジェクト指向
2.8.3 宣言型
2.8.4 配列の処理
2.9 まとめ
Chapter 3 チューリングマシンおよびチューリング完全
3.1 停止性問題
3.2 チューリングマシン
3.3 万能チューリングマシン
3.4 チューリング完全性
3.5 チューリングマシンを作ろう
3.5.1 シミュレータ
3.5.2 サンプル紹介
3.6 まとめ
Part 2 非定型プログラミング言語
Chapter 4 Forth
4.1 インストール
4.2 起源と哲学
4.3 言語
4.3.1 スタックを理解する
4.3.2 スタックの利用
4.3.3 ワードとループ
4.3.4 真とは何か
4.3.5 その他の制御構造
4.3.6 Forthのメモリの使い方
4.3.7 入力と出力
4.4 平方根の再検討
4.5 考察
4.6 まとめ
Chapter 5 SNOBOL
5.1 インストール
5.2 起源と哲学
5.3 言語
5.3.1 SNOBOLを実行する
5.3.2 変数とデータ型
5.3.3 配列とテーブル
5.3.4 パターンの嵐
5.3.5 関数
5.3.6 入力と出力
5.4 SNOBOLによる機械学習
5.4.1 機械学習の基礎
5.4.2 分類器の実装
5.4.3 分類器の実行
5.5 議論
5.6 まとめ
Chapter 6 CLIPS
6.1 インストール
6.2 起源と哲学
6.3 言語
6.3.1 CLIPSを用いた作業
6.3.2 「Hello, world!」の実装
6.3.3 事実と規則
6.4 CLIPSイン・アクション
6.4.1 簡単な電卓
6.4.2 家族再考
6.4.3 工場にて
6.4.4 アイリスの分類用エキスパートシステム
6.5 議論
6.6 まとめ
Part 3 難解プログラミング言語
Chapter 7 ABCのABC
7.1 ABC
7.1.1 言語
7.1.2 ABCの実装
7.1.3 ABCをテストする
7.2 ABC2
7.2.1 機能の拡張
7.2.2 ABC2の実装
7.3 ABC2イン・アクション
7.3.1 Hello World!
7.3.2 パイの一切れ
7.3.3 電気機械式アリスモメーター
7.4 議論
7.5 まとめ
Chapter 8 FRACTRAN
8.1 FRACTRANの仕様
8.2 2つの実装の物語
8.2.1 Schemeによる実装
8.2.2 Pythonによる実装
8.3 FRACTRANを使う
8.4 FRACTRANを理解する
8.5 その他のFRACTRANのサンプル
8.5.1 引き算
8.5.2 2つの整数の最大値
8.5.3 レジスタの複製
8.5.4 乗算
8.5.5 コンウェイのPRIMEGAME
8.5.6 コラッツ予想
8.5.7 FRACTRANからの挨拶
8.6 議論
8.6.1 FRACTRANはチューリング完全なのか
8.6.2 FRACTRANとコラッツ予想
8.6.3 FRACTRANについての最終的な考察
8.7 まとめ
Chapter 9 PIET
9.1 インストール
9.2 Pietを理解する
9.2.1 Pietの色彩
9.2.2 数字の表現
9.2.3 プログラムの表現
9.2.4 Pietのコマンド
9.2.5 プログラムの流れ
9.3 Pietイン・アクション
9.3.1 「2 + 2 = 4」の証明
9.3.2 Hiと挨拶する
9.3.3 カウントダウン
9.3.4 疑似乱数生成器
9.4 ピエト・モンドリアンへのオマージュ
9.5 Pietの世界
9.5.1 Pietについて
9.5.2 コード
9.5.3 実装およびツール
9.6 考察
9.7 まとめ
Chapter 10 Brainfuck
10.1 BFとは何か?
10.2 2つの実装
10.2.1 オリジナル版インタプリタ
10.2.2 SNOBOLとBFの出会い
10.3 BFイン・アクション
10.3.1 初歩の一歩
10.3.2 ビットをかじる
10.3.3 乗法的乗数
10.4 BFマルチバース
10.4.1 サンプルコード
10.4.2 チュートリアル
10.4.3 実装
10.4.4 インスピレーション
10.4.5 BFの学術的側面
10.5 考察
10.6 まとめ
Chapter 11 Befunge
11.1 Befunge-93ワールドツアー
11.1.1 Befunge-93のビルド
11.1.2 テキストの出力
11.1.3 BEditの使い方
11.1.4 BefungeにHelloと挨拶させよう
11.2 Befungeの実践
11.2.1 流れ(フロー)に身を任せる
11.2.2 橋を架ける
11.2.3 サイコロを楽しむ
11.2.4 放浪の旅
11.2.5 オンザフライでプレイフィールドを更新する
11.3 考察
11.4 まとめ
Part 4 自家製難解プログラミング言語
Chapter 12 Filska
12.1 哲学とデザイン
12.1.1 プログラムの構造と構文
12.1.2 フロー制御
12.1.3 メモリ
12.1.4 算術演算
12.1.5 比較
12.1.6 数学の関数
12.1.7 入力と出力
12.2 Filskaの実装
12.2.1 全体構造と処理
12.2.2 解析
12.2.3 実行ループ
12.2.4 引数を持たない命令
12.2.5 引数付きの命令
12.2.6 フロー制御命令
12.3 まとめ
Chapter 13 Filskaを使う
13.1 こんにちは、世界!
13.1.2 こんにちは、数学!
13.1.2 こんにちは、多項式
13.1.3 こんにちは、多項式!の実装
13.2 フィボナッチとは誰か
13.3 乱数
13.3.1 MINSTDの実装
13.3.2 MINSTDの評価を行う
13.4 シンプルなフラクタル
13.5 問題の根本に迫る
13.6 直線への線形最小二乗フィット
13.7 考察
13.8 まとめ
Chapter 14 Firefly
14.1 哲学と設計
14.1.1 移動命令
14.1.2 表示命令
14.1.3 音楽命令
14.1.4 残りの命令
14.2 実装
14.2.1 インタプリタの構造とメインループ
14.2.2 移動命令
14.2.3 表示命令
14.2.4 音楽命令
14.3 micro:bitの設定
14.3.1 micro:bitハードウェアの概要
14.3.2 外部スピーカーの使用
14.4 まとめ
Chapter 15 Fireflyを使う
15.1 プロセス
15.1.1 Fireflyのコードを書く
15.1.2 コンソールインタプリタの利用
15.1.3 バンドルの作成
15.2 フライ・タイム
15.3 スペース・トレック
15.4 光輝くベートーヴェン
15.5 ダンス・ダンス
15.5.1 ポーズ
15.5.2 ダンス
15.5.3 音楽
15.6 ティー・タイム
15.7 考察
15.8 まとめ
Chapter 16 さらに先へ
16.1 紹介しきれなかった言語たち
16.1.1 Malbolge
16.1.2 INTERCAL
16.1.3 Whitespace
16.1.4 Shakespeare
16.1.5 Whirl
16.1.6 Taxi
16.1.7 Dathanna
16.2 プログラミング言語リソース
16.2.1 プログラミング言語
16.2.2 データ構造
16.2.3 コンパイラとインタプリタ
16.3 エピローグ
Appendix A Fireflyによる遺伝的プログラミング
A.1 遺伝的プログラミング入門
A.2 遺伝的プログラミングの仕組み
A.3 LED表示の定義
A.4 簡易版Fireflyインタプリタ
A.5 遺伝的アルゴリズム
A.6 全てを1つにまとめる
A.7 Fireflyのプログラムの発展
A.7.1 警告サイン
A.7.2 レーダースイープ
A.7.3 跳ねるボール
A.8 考察
A.8.1 母集団の効果
A.8.2 最終プログラムの多様性
A.8.3 遺伝的プログラミングは最短のプログラムを見つけられるのか
A.9 最終的な感想