次: , 前: Program Modes, 上: Programs


20.2 リストとS式

慣習として、釣り合った式を扱うEmacsのキーは、普通、コントロール・メタ文字です。 これらは、コントロールやメタだけの対応したキーの機能に似せてあります。 これらは、プログラム言語の式だけに関係したコマンドだと考えられがちですが、 ある種の括弧が存在する(自然言語も含めた)任意の言語に対しても有益なものです。

これらのコマンドは、2つのグループに分けられます。 一方は(括弧でまとめた)リスト(list)1だけを扱うもので、 丸括弧、角括弧、中括弧(使用言語において対応が取れている必要がある括弧)と、 それらをクォートするエスケープ文字だけに注目するコマンド群です。

もう一方は、式あるいはS式(sexp)を扱うコマンド群です。 「sexp」という用語は、 Lispの式を意味する古くからの用語s-expressionに由来します。 Emacsでは「S式」の概念をLispに限定しません。 プログラムを記述した言語が何であっても、その式をS式と呼びます。 各プログラム言語には独自のメジャーモードがあり、 そこでは、その言語の式をS式とみなすように構文テーブルを調整してあります。

一般にS式には、丸括弧、角括弧、中括弧に囲まれた部分だけでなく、 シンボル、数値、文字列定数も含まれます。

Cのように前置演算子と中置演算子を使う言語では、 すべての式をS式として扱うことは不可能です。 たとえば、Cモードでは、`foo + bar'はCの式ですが、 S式としては認識しません。 かわりに、`foo'と`bar'をそれぞれ1つのS式として認識し、 `+'はあいだにある句読点として認識します。 これは根本的に曖昧なのです。 たとえば、ポイントが`f'にあるとき、横断すべきS式としては、 `foo + bar'でも`foo'でも正当な選択肢です。 `(foo + bar)'は、Cモードにおいて単一のS式であることに注意してください。

式の構文が曖昧なために、 Emacsが正しく解釈できるようにしようなどとは誰も思わない言語もあります。


脚注

[1] 【訳注】 ここでは、Lispの「リスト」ではなく、 単に括弧で括った一塊のこと。