回答:
つまり、複数のバインディングがある場合、変数は順次バインドされるため、それぞれがその前にバインドされている値にバインドされている値、つまりlet*
バインディング内でその前にある値に依存することができます。
let
(アスタリスク)、バインディングのいずれもが、他のいずれかの前に発生すると仮定することはできない(変数は、原則的に、並列にバインドすることができます)。
したがって、の値(let ((a 42) (b a))...b)
にバインドしようとするためにエラーが発生する可能性がb
ありa
、a
(少なくともa
thisにバインドされている特定のlet
)値にバインドされていると想定することはできません。
[他の(たとえばグローバル)変数a
が値(たとえば)にバインドされている場合、5
そのlet
式はその(ローカル)a
をグローバルの値(つまり。)に42
バインドb
してバインドします。a
5
しかし、にバインドされてからの値にバインドされるため、(let* ((a 42) (b a))...b)
戻ります。42
a
42
b
a
Elispマニュアルのノードローカル変数を参照してください。
コメント内の@ DoMiNeLa10のリマインダーからの更新:
マニュアルに加えて、ヘルプコマンドも使用できます。「Emacsに尋ねる」ためのさまざまな方法の中で、それらは最初に学び、最も役立つものの1つです。
そして、C-h f let*
私たちに言うと、簡潔に:Each VALUEFORM can refer to the symbols already bound by this VARLIST.
ここで質問することに何の問題もありませんが、Emacsにそのような質問をした場合は、あなた自身に有利になります。を使用して、マニュアルの情報ブラウザを開き、マニュアルを選択し、を使用してインデックスを検索します(補完あり)。これにより、これをカバーするノードに直接移動します。C-h i
Elisp
i let*
let*
(そして、マニュアルは通常、ここで行われるよりも優れたものをカバーしています。何千人もの貢献者による多くの時間と労力がそれを正しくすることに費やしてきたためです:正確で完全です。)
このサイトでタグを使用した質問と回答を検索することもできます。検索フィールドに入力するlet-binding
だけ[let-binding]
です。(今、この質問がおそらく重複しているかどうかを確認するためにそれを行います...)
F1 f
です。
b
は、5 に等しいとタイプミスがありa
ます。これは、globalにバインドされているためです。let
代わりに読む必要がありますlet*