GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/eintr/Prevent-confusion.html ・ emacs-doc.conao3.com

let 混乱を防ぐ

let という特殊形式は、混同を防ぎます。let は ローカル変数 の名前を作成し、let 式の外側で同名のものが使われた場合にそれを上書きします(コンピュータサイエンスの専門用語では、これを変数の 束縛 と呼びます)。これは、ホストの家で彼が「家」と言うとき、それはあなたの家ではなく彼自身の家を指しているのだと理解するようなものです。(関数の引数に名前を付けるために使用される記号も、まったく同様にローカル変数として束縛されます。defun マクロ を参照してください。)

let を別の捉え方で考えると、それはコード内に特別な領域を定義していると言えます。つまり、let 式の本体内では、名前を付けた変数は独自のローカルな意味を持ちます。一方、let 本体の外では、それらは別の意味を持つ(あるいは全く定義されていない)ことになります。これは、let 本体内において、let 式で名前を付けた変数に対して setq を呼び出すと、その名前の ローカル 変数の値が設定されることを意味します。しかし、let 本体の外(別の場所で定義された関数を呼び出す場合など)では、let 式で名前を付けた変数に対して setq を呼び出しても、そのローカル変数には 影響しません。9

let では、一度に複数の変数を作成できます。また、let は作成する各変数に、ユーザーが指定した値または nil のいずれかの初期値を割り当てます。(専門用語では、これを変数を値にバインドすると言います。)let が変数を作成してバインドした後、let の本体内のコードを実行し、本体内の最後の式の値を let 式全体の値として返します。(「Execute」はリストを評価することを意味する専門用語で、「実際に効力を持たせる」という意味の言葉(Oxford English Dictionary)に由来しています。動作を実行するために式を評価することから、「execute」は「evaluate」の類義語として定着しました。)


脚注

(9)

ここでは、「字句束縛」と呼ばれるスタイルを使用した際の let の挙動について説明します(How let Binds Variables を参照)。