Uminchuの日記: (define (foo bar) (hoge hage..) に気をつけろ!
(define (foo bar) (hoge hage..)
の様な形でいつも関数を定義していた。
一応、これがlambdaを使ったSyntax Sugarであることは
知っていたが、全く気にしていなかった。
しかし、SICP3.1.1のnew-widthdraw関数を試してみていて
いつものdefineが使えないことに気づいた
最初はこんな書き方をしていた
(define (new-widthdraw amount)
(let ((balance 100))
(if ... 続きは同様
だが、表示されるのは毎回100-amount。
んで、ちゃんと教科書通り書くとうまくいく。
なるほど。従来の書き方だと、束縛した関数が実行される環境を
コントロールできないことに気づいた。
今まで、「環境」はCで言う「スコープ」や「名前空間」
みたいなもんだと思っていたが、結構重要なのねと実感した。