Go to the first, previous, next, last section, table of contents.

ローカル変数をバインドする

ローカル変数のバインディングは、 ((変数 . 値) ...) という pair のリストである association リストでインプリメントされている、と見ることができます。このリスト の前に新しいバインディングを追加すると、リストのずっと下の方に存在する(同じ)変 数に対するバインディングは見えなくなります。 (バインディングを作った)フォーム を exit すると、前のフォームが(再び)見えるようになります。ローカルバインディン グが存在しない場合、グローバル値が見えます。

ローカル変数をバインドするフォームは、関数呼び出し(チャプター 10 [関数]、ペ ージ 83 参照)、マクロ呼び出し(チャプター 11 [マクロ]、ページ 91 参照)、特殊 フォーム let, let*、 condition-case (セクション 12.7 [condition-case]、ペー ジ 108 参照) です。(他には??)

Special Form: let binding-list forms*

この関数は、 binding-list に従い変数をバインドし、 forms 中の全てのフォー ムを順に評価します。 let は (forms 中の)最後のフォームの値を返します。

binding-list の各要素は、シンボル(この場合、そのシンボルは nil にバインド される)か、フォーム (symbol value-form) のリスト(この場合、let は value- form を評価した結果を symbol にバインドする) です。

フォーム(の全て)を評価する前に let フォームを exit した場合、 (訳注:バイ ンドされた)シンボルのローカルバインディングを取り去ります。

value-form はシンボルのバインディングを行なう前に (全て)、現われた順に評価 されます(これにたよることができる??)。次の例において、Z は Y の前の値(2)に バインドされ、新しい値にはバインドされません。

  (setq Y 2)
  => 2
  (let (X
        (Y 1)
        (Z Y)
    (list X Y Z))
  => (nil 1 2)

Special Form: let* binding-list forms*

この特殊フォームは、 binding-list の各シンボルを(残りのシンボルをバインド する前に) 与えられた順にバインドする点を除いて、let と同じです。このため binding-list 中の式は、この binding-list で(すでに)バインドされたシンボル を参照することができます。以下に示した例を let に対する例と比較してみて下 さい。

  (setq Y 2)
  => 2
  (let* (X
         (Y 1)
         (Z Y))
    (list X Y Z))
  => (nil 1 1)


Go to the first, previous, next, last section, table of contents.