let と let* の違い
Emacs Lisp 初心者のメモなので間違っているかもしれません。。。
今日覚えたこと。
let* は、変数を順にバインドしていくため、それまでバインドした変数を後続で参照できるようだ。
*scratch* バッファで、
(let ((str1 "hoge") (str2 (concat str1 "fuga"))) str2)
を評価すると、*Backtrace*バッファに、
Debugger entered--Lisp error: (void-variable str1) (concat str1 "fuga") (let ((str1 "hoge") (str2 ...)) str2) eval((let )((str1 "hoge") (str2 ...)) str2))( eval-last-sexp-1(t) eval-last-sexp(t) eval-print-last-sexp() call-interactively(eval-print-last-sexp nil nil)
のエラーが表示される(変数 str1 が定義されていない)。で、let*の方を評価すると
(let* ((str1 "hoge") (str2 (concat str1 "fuga"))) str2) "hogefuga"
となって、 str1 がバインド済みだと確認できる。