(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

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 が用意されているんだよなーと改めて勉強になった。