SchemeのletとJSの即時関数実行パターンって同じだよね
こんにちは. この前, 部屋の掃除中, Schemeの本をみつけて,パラパラ読んでいました. 読んでいて気づいたんですけど, SchemeのletとJSの即時関数実行パターンって同じですよね?
JSで
(function (a, b) { return a*a + b*b; })(3, 4);
とか書くじゃないですか? 即時関数実行パターンを使ったやつ
これってSchemeだと
((lambda (a b) (+ (* a a) (* b b))) 3 4)
になるんだよね. lambdaの仮引数a, bの有効な範囲がlambda本体の中に限定されている状態. いわゆるローカル変数. でも, ローカル変数を使うのにいちいちlambdaって書くのは面倒だよね・・・ そこでletの出番.
letを使うと
(let ((a 3) (b 4)) (+ (* a a) (* b b)))
こんなふうに書ける.
JSは「ブラウザで動くScheme」をコンセプトにして作られたらしいけど, たしかに似ているなーと感じる部分はたくさんある. スコープもそうだし, 関数がファーストオブジェクトであったり, クロージャなどなど. こんなかんじで互いの似ているところ, 違うところを探していくのも面白い.
そういや, JSにもletってあったな...(使ったことないけど)