関数が戻り値として返ること

(define a (lambda (x) (lambda (y) (+ x y)))

みたいな関数aがあって、xを固定して一変数の新しい関数を返すとき、

(define (b y) (a 5))
としなければならないと勘違いしてたと書きましたが、それがどういう事態を引き起こしていたか、改めて考えた。

(a 5) を実行すると、
(lambda (y) (+ 5 y))
という関数が返る。

(define (b y) ...
は、一変数yを取る関数だが、lambda (y) (+ 5 y)の yとは縁もゆかりもない。ので、
(b 3)とか実行すると、(lambda (y) (+ 5 y))が返り、 (b 3)で与えた3は捨てられる。

((b 3) 5) ;; -> 10
((b 100) 5) ;; -> 10

よく考えれば当たり前。

こーゆーことをもうちょっと早く理解できるぐらい賢くなりたい。
こんな年になっては無理か。

      • -

ThinkPadの ブラウザキー邪魔。
はてなの自動バックアップ機能に何度助けられたことか。
もう剥がしておくか。かっこ悪いけど。