Why let expression? We can use fn expression, I think we don't need let expression.
タイトル、適当に英語で書いてみた。若干間違っている気がするけど、昨日 Clojure の話をしていて「なんで let が必要なのか分からない」と言われたのでそれについて。
例えば Clojure 。
(let [x 10, y (square x), z (cube y)] (+ x y z))
let expression is simple and best form, may be.
こういう風に、複数の値に変数を束縛させる場合 let 式は非常にシンプルに書ける。
let はたぶんどの Lisp 系でも同じようなもんだと思うけど、 lambda で表現出来る。
もし、 let 式を使わなければこうなる。つら…。
((fn [x] ((fn [y] ((fn [z] (+ x y z)) (cube y))) (square x))) 10)
Gauche だと Clojure の let は let* が近いかな。いずれにしても、 lambda で表現出来るけど、それだけだと不便だからマクロやスペシャルフォームという形で let が用意されているんだよなーと改めて勉強になった。