訳者まえがき はじめに 対象とする読者 Lispの歴史 初心者へ一言 謝 辞 1. リスト処理 1.1 Lispのリスト 1.1.1 Lispのアトム 1.1.2 リスト内の空白 1.1.3 GNU Emacsのリスト入力補佐機能 1.2 プログラムの実行 1.3 エラーメッセージの生成 1.4 シンボル名と関数定義 1.5 Lispインタープリタ 1.5.1 バイトコンパイル 1.6 評 価 1.6.1 内側のリストの評価 1.7 変 数 1.7.1 値のないシンボルに対するエラーメッセージ 1.8 引 数 1.8.1 引数のデータ型 1.8.2 引数としての変数やリストの値 1.8.3 可変個数の引数 1.8.4 引数に誤った型のオブジェクトを指定 1.8.5 関数message 1.9 変数への値の設定 1.9.1 setの使い方 1.9.2 setqの使い方 1.9.3 数え上げ 1.10 まとめ 1.11 演習問題 2. 評価の練習 2.1 バッファ名 2.2 バッファの取得 2.3 バッファの切り替え 2.4 バッファサイズとポイントの位置 2.5 演習問題 3. 関数定義の書き方 3.1 スペシャルフォームdefun 3.2 関数定義のインストール 3.2.1 関数定義の変更 3.3 関数を対話的にする 3.3.1 対話的multiply-by-seven 3.4 interactiveの他のオプション 3.5 コードの恒久的インストール 3.6 let 3.6.1 let式の構造 3.6.2 let式の例 3.6.3 let式の非初期化変数 3.7 スペシャルフォームif 3.7.1 関数type-of-animalの詳細 3.8 If--then--else式 3.9 Lispの真偽値 3.10 save-excursion 3.10.1 save-excursion式の雛型 3.11 復 習 3.12 演習問題 4. バッファ関連の関数 4.1 詳しい情報を得る 4.2 beginning-of-bufferの簡略した定義 4.3 mark-whole-bufferの定義 4.3.1 mark-whole-bufferの本体 4.4 append-to-bufferの定義 4.4.1 append-to-bufferのinteractive式 4.4.2 append-to-bufferの本体 4.4.3 append-to-bufferのsave-excursion 4.5 復 習 4.6 演習問題 5. 多少複雑な関数 5.1 copy-to-bufferの定義 5.2 insert-bufferの定義 5.2.1 insert-bufferのinteractive式 読み出し専用バッファ interactive式の`b' 5.2.2 関数insert-bufferの本体 5.2.3 orのかわりにifを使ったinsert-buffer 5.2.4 orの本体 5.2.5 insert-bufferのlet式 5.3 beginning-of-bufferの完全な定義 5.3.1 オプションの引数 5.3.2 引数を指定したbeginning-of-buffer 大きなバッファでの動作 小さなバッファでの動作 5.3.3 beginning-of-bufferの完全なコード 5.4 復 習 5.5 &optional引数の演習問題 6. ナロイングとワイドニング 6.1 スペシャルフォームsave-restriction 6.2 what-line 6.3 ナロイングの演習問題 7. 基本関数 car、cdr、cons 7.1 carとcdr 7.2 cons 7.2.1 リストの長さ:length 7.3 nthcdr 7.4 setcar 7.5 setcdr 7.6 演習問題 8. テキストのカットと保存 8.1 zap-to-char 8.1.1 interactive式 8.1.2 zap-to-charの本体 8.1.3 関数search-forward 8.1.4 関数progn 8.1.5 zap-to-charのまとめ 8.1.6 第18版の実装 progn式の本体 8.2 kill-region 8.3 delete-region:Cへ回り道 8.4 defvarによる変数の初期化 8.5 copy-region-as-kill 8.5.1 copy-region-as-killの本体 関数kill-append copy-region-as-killの偽の場合の動作 8.6 復 習 8.7 探索の演習問題 9. リストの実装方法 9.1 演習問題 10. テキストの取り出し方 10.1 キルリングの概要 10.2 変数kill-ring-yank-pointer 10.3 yankとnthcdrの演習問題 11. ループと再帰 11.1 while 11.1.1 whileループとリスト 11.1.2 例:print-elements-of-list 11.1.3 増加カウンタによるループ 増加カウンタの例 関数定義の各部分 関数定義をまとめる 11.1.4 減少カウンタによるループ 減少カウンタの例 関数の各部分 関数定義をまとめる 11.2 再 帰 11.2.1 リストについての再帰 11.2.2 カウンタの代用としての再帰 引数が3の場合 11.2.3 condを用いた再帰の例 11.3 ループの演習問題 12. 正規表現の探索 12.1 sentence-endのための正規表現 12.2 関数re-search-forward 12.3 forward-sentence whileループ 正規表現の探索 12.4 forward-paragraph:関数の宝庫 let*式 先へ進めるwhileループ 段落のあいだ 段落の中 詰め込み接頭辞なし 詰め込み接頭辞あり まとめ 12.5 専用タグファイルの作成方法 12.6 復 習 12.7 re-search-forwardの演習問題 13. 数え上げ:繰り返しと正規表現 13.1 関数count-words-region 13.1.1 count-words-regionの空白に関するバグ 13.2 再帰による単語の数え上げ 13.3 演習問題:句読点の数え上げ 14. defun内の単語の数え上げ 14.1 何を数えるか? 14.2 単語やシンボルを構成するものは何か? 14.3 関数count-words-in-defun 14.4 ファイル内の複数のdefunsの数え上げ 14.5 ファイルを探す 14.6 lengths-list-fileの詳細 14.7 別のファイルのdefuns内の単語の数え上げ 14.7.1 関数append 14.8 別のファイルの再帰による単語の数え上げ 14.9 グラフ表示用データの準備 14.9.1 リストのソート(整列) 14.9.2 ファイルのリストの作成 15. グラフの準備 15.1 関数graph-body-print 15.2 関数recursive-graph-body-print 15.3 軸表示の必要性 15.4 演習問題 16. 個人用ファイル`.emacs' 16.1 サイト全体の初期化ファイル 16.2 一回だけの作業用の変数の設定 16.3 ファイル`.emacs'入門 16.4 TextモードとAuto Fillモード 16.5 メールの別名 16.6 Indent Tabsモード(タブによる字下げ) 16.7 キーバインド例 16.8 ファイルのロード 16.9 オートロード 16.10 簡単な拡張:line-to-top-of-window 16.11 キーマップ 16.12 X11の色指定 16.13 第19版のその他 16.14 モード行の変更 17. デバッグ 17.1 debug 17.2 debug-on-entry 17.3 debug-on-quitと(debug) 17.4 ソースレベルのデバッガedebug 17.5 デバッグの演習問題 18. 結 論 A. 関数the-the B. キルリングの扱い方 B.1 関数rotate-yank-pointer B.1.1 rotate-yank-pointerの本体 if式の偽の場合の動作 剰余関数% rotate-yank-pointerにおける%の利用 最後の要素を指す B.2 yank 引数の渡し方 負の引数を渡す B.3 yank-pop C. ラベル付きグラフ C.1 print-graphの変数リスト C.2 関数print-Y-axis C.2.1 余りの計算 C.2.2 Y軸の要素の作成 C.2.3 Y軸のコラムの作成 C.2.4 print-Y-axisの最終版 C.3 関数print-X-axis C.3.1 X軸の目盛 C.4 グラフ全体の表示 C.4.1 print-graphのテスト C.4.2 単語やシンボルの個数のグラフ lambda式 関数mapcar 別のバグ ... もっとも潜在的 C.4.3 グラフ 索引 筆者について
対象とする読者 Lispの歴史 初心者へ一言 謝 辞
1.1 Lispのリスト 1.1.1 Lispのアトム 1.1.2 リスト内の空白 1.1.3 GNU Emacsのリスト入力補佐機能 1.2 プログラムの実行 1.3 エラーメッセージの生成 1.4 シンボル名と関数定義 1.5 Lispインタープリタ 1.5.1 バイトコンパイル 1.6 評 価 1.6.1 内側のリストの評価 1.7 変 数 1.7.1 値のないシンボルに対するエラーメッセージ 1.8 引 数 1.8.1 引数のデータ型 1.8.2 引数としての変数やリストの値 1.8.3 可変個数の引数 1.8.4 引数に誤った型のオブジェクトを指定 1.8.5 関数message 1.9 変数への値の設定 1.9.1 setの使い方 1.9.2 setqの使い方 1.9.3 数え上げ 1.10 まとめ 1.11 演習問題
1.1.1 Lispのアトム 1.1.2 リスト内の空白 1.1.3 GNU Emacsのリスト入力補佐機能
1.5.1 バイトコンパイル
1.6.1 内側のリストの評価
1.7.1 値のないシンボルに対するエラーメッセージ
1.8.1 引数のデータ型 1.8.2 引数としての変数やリストの値 1.8.3 可変個数の引数 1.8.4 引数に誤った型のオブジェクトを指定 1.8.5 関数message
message
1.9.1 setの使い方 1.9.2 setqの使い方 1.9.3 数え上げ
set
setq
2.1 バッファ名 2.2 バッファの取得 2.3 バッファの切り替え 2.4 バッファサイズとポイントの位置 2.5 演習問題
3.1 スペシャルフォームdefun 3.2 関数定義のインストール 3.2.1 関数定義の変更 3.3 関数を対話的にする 3.3.1 対話的multiply-by-seven 3.4 interactiveの他のオプション 3.5 コードの恒久的インストール 3.6 let 3.6.1 let式の構造 3.6.2 let式の例 3.6.3 let式の非初期化変数 3.7 スペシャルフォームif 3.7.1 関数type-of-animalの詳細 3.8 If--then--else式 3.9 Lispの真偽値 3.10 save-excursion 3.10.1 save-excursion式の雛型 3.11 復 習 3.12 演習問題
defun
3.2.1 関数定義の変更
3.3.1 対話的multiply-by-seven
multiply-by-seven
interactive
let
3.6.1 let式の構造 3.6.2 let式の例 3.6.3 let式の非初期化変数
if
3.7.1 関数type-of-animalの詳細
type-of-animal
save-excursion
3.10.1 save-excursion式の雛型
4.1 詳しい情報を得る 4.2 beginning-of-bufferの簡略した定義 4.3 mark-whole-bufferの定義 4.3.1 mark-whole-bufferの本体 4.4 append-to-bufferの定義 4.4.1 append-to-bufferのinteractive式 4.4.2 append-to-bufferの本体 4.4.3 append-to-bufferのsave-excursion 4.5 復 習 4.6 演習問題
beginning-of-buffer
mark-whole-buffer
4.3.1 mark-whole-bufferの本体
append-to-buffer
4.4.1 append-to-bufferのinteractive式 4.4.2 append-to-bufferの本体 4.4.3 append-to-bufferのsave-excursion
5.1 copy-to-bufferの定義 5.2 insert-bufferの定義 5.2.1 insert-bufferのinteractive式 読み出し専用バッファ interactive式の`b' 5.2.2 関数insert-bufferの本体 5.2.3 orのかわりにifを使ったinsert-buffer 5.2.4 orの本体 5.2.5 insert-bufferのlet式 5.3 beginning-of-bufferの完全な定義 5.3.1 オプションの引数 5.3.2 引数を指定したbeginning-of-buffer 大きなバッファでの動作 小さなバッファでの動作 5.3.3 beginning-of-bufferの完全なコード 5.4 復 習 5.5 &optional引数の演習問題
copy-to-buffer
insert-buffer
5.2.1 insert-bufferのinteractive式 読み出し専用バッファ interactive式の`b' 5.2.2 関数insert-bufferの本体 5.2.3 orのかわりにifを使ったinsert-buffer 5.2.4 orの本体 5.2.5 insert-bufferのlet式
読み出し専用バッファ interactive式の`b'
or
5.3.1 オプションの引数 5.3.2 引数を指定したbeginning-of-buffer 大きなバッファでの動作 小さなバッファでの動作 5.3.3 beginning-of-bufferの完全なコード
大きなバッファでの動作 小さなバッファでの動作
&optional
6.1 スペシャルフォームsave-restriction 6.2 what-line 6.3 ナロイングの演習問題
save-restriction
what-line
car
cdr
cons
7.1 carとcdr 7.2 cons 7.2.1 リストの長さ:length 7.3 nthcdr 7.4 setcar 7.5 setcdr 7.6 演習問題
7.2.1 リストの長さ:length
length
nthcdr
setcar
setcdr
8.1 zap-to-char 8.1.1 interactive式 8.1.2 zap-to-charの本体 8.1.3 関数search-forward 8.1.4 関数progn 8.1.5 zap-to-charのまとめ 8.1.6 第18版の実装 progn式の本体 8.2 kill-region 8.3 delete-region:Cへ回り道 8.4 defvarによる変数の初期化 8.5 copy-region-as-kill 8.5.1 copy-region-as-killの本体 関数kill-append copy-region-as-killの偽の場合の動作 8.6 復 習 8.7 探索の演習問題
zap-to-char
8.1.1 interactive式 8.1.2 zap-to-charの本体 8.1.3 関数search-forward 8.1.4 関数progn 8.1.5 zap-to-charのまとめ 8.1.6 第18版の実装 progn式の本体
search-forward
progn
progn式の本体
kill-region
delete-region
defvar
copy-region-as-kill
8.5.1 copy-region-as-killの本体 関数kill-append copy-region-as-killの偽の場合の動作
関数kill-append copy-region-as-killの偽の場合の動作
kill-append
9.1 演習問題
10.1 キルリングの概要 10.2 変数kill-ring-yank-pointer 10.3 yankとnthcdrの演習問題
kill-ring-yank-pointer
yank
11.1 while 11.1.1 whileループとリスト 11.1.2 例:print-elements-of-list 11.1.3 増加カウンタによるループ 増加カウンタの例 関数定義の各部分 関数定義をまとめる 11.1.4 減少カウンタによるループ 減少カウンタの例 関数の各部分 関数定義をまとめる 11.2 再 帰 11.2.1 リストについての再帰 11.2.2 カウンタの代用としての再帰 引数が3の場合 11.2.3 condを用いた再帰の例 11.3 ループの演習問題
while
11.1.1 whileループとリスト 11.1.2 例:print-elements-of-list 11.1.3 増加カウンタによるループ 増加カウンタの例 関数定義の各部分 関数定義をまとめる 11.1.4 減少カウンタによるループ 減少カウンタの例 関数の各部分 関数定義をまとめる
print-elements-of-list
増加カウンタの例 関数定義の各部分 関数定義をまとめる
減少カウンタの例 関数の各部分 関数定義をまとめる
11.2.1 リストについての再帰 11.2.2 カウンタの代用としての再帰 引数が3の場合 11.2.3 condを用いた再帰の例
引数が3の場合
cond
12.1 sentence-endのための正規表現 12.2 関数re-search-forward 12.3 forward-sentence whileループ 正規表現の探索 12.4 forward-paragraph:関数の宝庫 let*式 先へ進めるwhileループ 段落のあいだ 段落の中 詰め込み接頭辞なし 詰め込み接頭辞あり まとめ 12.5 専用タグファイルの作成方法 12.6 復 習 12.7 re-search-forwardの演習問題
sentence-end
re-search-forward
forward-sentence
whileループ 正規表現の探索
forward-paragraph
let*式 先へ進めるwhileループ 段落のあいだ 段落の中 詰め込み接頭辞なし 詰め込み接頭辞あり まとめ
let*
13.1 関数count-words-region 13.1.1 count-words-regionの空白に関するバグ 13.2 再帰による単語の数え上げ 13.3 演習問題:句読点の数え上げ
count-words-region
13.1.1 count-words-regionの空白に関するバグ
14.1 何を数えるか? 14.2 単語やシンボルを構成するものは何か? 14.3 関数count-words-in-defun 14.4 ファイル内の複数のdefunsの数え上げ 14.5 ファイルを探す 14.6 lengths-list-fileの詳細 14.7 別のファイルのdefuns内の単語の数え上げ 14.7.1 関数append 14.8 別のファイルの再帰による単語の数え上げ 14.9 グラフ表示用データの準備 14.9.1 リストのソート(整列) 14.9.2 ファイルのリストの作成
count-words-in-defun
defuns
lengths-list-file
14.7.1 関数append
append
14.9.1 リストのソート(整列) 14.9.2 ファイルのリストの作成
15.1 関数graph-body-print 15.2 関数recursive-graph-body-print 15.3 軸表示の必要性 15.4 演習問題
graph-body-print
recursive-graph-body-print
16.1 サイト全体の初期化ファイル 16.2 一回だけの作業用の変数の設定 16.3 ファイル`.emacs'入門 16.4 TextモードとAuto Fillモード 16.5 メールの別名 16.6 Indent Tabsモード(タブによる字下げ) 16.7 キーバインド例 16.8 ファイルのロード 16.9 オートロード 16.10 簡単な拡張:line-to-top-of-window 16.11 キーマップ 16.12 X11の色指定 16.13 第19版のその他 16.14 モード行の変更
line-to-top-of-window
17.1 debug 17.2 debug-on-entry 17.3 debug-on-quitと(debug) 17.4 ソースレベルのデバッガedebug 17.5 デバッグの演習問題
debug
debug-on-entry
debug-on-quit
(debug)
edebug
the-the
B.1 関数rotate-yank-pointer B.1.1 rotate-yank-pointerの本体 if式の偽の場合の動作 剰余関数% rotate-yank-pointerにおける%の利用 最後の要素を指す B.2 yank 引数の渡し方 負の引数を渡す B.3 yank-pop
rotate-yank-pointer
B.1.1 rotate-yank-pointerの本体 if式の偽の場合の動作 剰余関数% rotate-yank-pointerにおける%の利用 最後の要素を指す
if式の偽の場合の動作 剰余関数% rotate-yank-pointerにおける%の利用 最後の要素を指す
%
引数の渡し方 負の引数を渡す
yank-pop
C.1 print-graphの変数リスト C.2 関数print-Y-axis C.2.1 余りの計算 C.2.2 Y軸の要素の作成 C.2.3 Y軸のコラムの作成 C.2.4 print-Y-axisの最終版 C.3 関数print-X-axis C.3.1 X軸の目盛 C.4 グラフ全体の表示 C.4.1 print-graphのテスト C.4.2 単語やシンボルの個数のグラフ lambda式 関数mapcar 別のバグ ... もっとも潜在的 C.4.3 グラフ
print-graph
print-Y-axis
C.2.1 余りの計算 C.2.2 Y軸の要素の作成 C.2.3 Y軸のコラムの作成 C.2.4 print-Y-axisの最終版
print-X-axis
C.3.1 X軸の目盛
C.4.1 print-graphのテスト C.4.2 単語やシンボルの個数のグラフ lambda式 関数mapcar 別のバグ ... もっとも潜在的 C.4.3 グラフ
lambda式 関数mapcar 別のバグ ... もっとも潜在的
lambda
mapcar