- Emacs LispはEmacsを拡張するプログラミング言語であり、ユーザーがEmacsを自分向けに調整し、効率的に使えるようにする
- Emacs Lispは関数呼び出しを通じてあらゆる処理を実行し、ユーザーはキーバインドやコマンドを通じて対話的に関数を実行できる
- Emacs Lispの関数は入力を受け取って出力を返し、環境に影響を与える副作用を持つことがある
- バッファはデータ構造として使われ、テキストの属性やバッファローカル変数を通じてさまざまな作業を行える
- Emacs Lispはリストとシンボルを使ってコード構造を形成し、部分評価やマクロを通じてコードを拡張できる
Emacs Lisp Elements
Emacs Lispプログラミング言語の全体像
- Protesilaos Stavrouによるこの書籍は、Emacs Lispプログラミング言語の全体像を提供する
- Emacsはプログラム可能なテキストエディタであり、Emacs Lispを解釈して動作する
- ユーザーはEmacsを自分向けに調整し、効率的な作業環境を作ることができる
- Emacs Lispを通じて、ユーザーは反復的な作業を自動化し、生産性を高められる
- この書籍は初心者から上級ユーザーまでを対象としたさまざまなテーマを扱う
Emacs Lispの評価
- Emacsにおけるすべての作業はEmacs Lisp関数の呼び出しを通じて行われる
- ユーザーはキーバインドやコマンドを通じて対話的に関数を実行できる
- Emacsはバッファ内のElispコードを評価でき、さまざまなコマンドを通じてコードを実行できる
eval-expression コマンドを使って現在のバッファでElispコードを評価できる
- Emacsは自己文書化機能を通じて現在の状態を報告する
副作用と戻り値
- Emacs Lisp関数は入力を受け取って出力を返し、環境に影響を与える副作用を持つことがある
- 関数の戻り値は別の関数の入力として使える
- 副作用を通じてEmacsの状態を操作し、望む作業を実行できる
- 副作用を慎重に使えば、Elispの潜在能力を最大限に活用できる
- 経験を通じて、副作用と戻り値を適切に扱う直感を養える
データ構造としてのバッファ
- バッファは文字列の並びとしてデータを保存し、さまざまな関数でバッファ位置を返す
- バッファの内容を文字列として抽出したり、特定の位置の間にある部分文字列を取得したりできる
- バッファに結果を表示したり、バッファに関連する変数を設定したりできる
- バッファは変数の束のように機能し、バッファローカルな値を持てる
- Emacsのウィンドウとフレームもデータ構造として利用できる
テキストの属性
- テキストは属性を持つことができ、Emacs Lispを通じてメタデータを調べられる
- テキスト属性は構文ハイライトのような効果を提供する
- ユーザーは
describe-char コマンドを通じてカーソル位置の文字属性を確認できる
- ユーザーは独自のメジャーモードを作成して、テキスト属性を手動で追加できる
- テキストは単なる文字以上の情報を持てる
シンボル、バランスの取れた式、引用
- Emacs Lispは括弧を多用する言語であり、コード構造を理解しやすくする
- リストは関数呼び出しとして評価されることもあれば、データとして返されることもある
- リストを評価したくない場合は単一引用符を使う
car と cdr 関数はリストの最初の要素と残りの要素を返す
- Emacs Lispはマクロを通じてコードを拡張できる
リスト内部の部分評価
- Emacs Lispコードは評価される場合もあれば、そのまま使われる場合もある
- リストを部分的に評価して特定の要素だけを評価できる
- バッククォート(`)とカンマ(,)を使ってリスト内部の特定の要素を評価できる
,@ を使うとリストの外側の括弧を取り除ける
- 部分評価はマクロでより一般的に使われる
マクロまたは特殊形式内部での評価
- Emacs Lispコードの基本的なケースは、評価されるリストか評価されないリストである
- マクロは、コードが別のコードへ展開されて評価されるようにするテンプレートシステムである
- マクロ内部では引用が異なる形で処理されることがある
- マクロはコードの意図をより明確に表現し、最適化を可能にする
- マクロを通じてコードの柔軟性と再利用性を高められる
まだコメントはありません。