本文
1.3.2 lambda を使う手続きの構築
ここでついに lambda が登場。
非 lambda 版だと
(define (pi-sum a b) (define (pi-term a) (/ 1.0 (* a (+ a 2)))) (define (pi-next n) (+ n 4)) (sum pi-term a pi-next b))
こうなるのが、 lambda 版だと
(define (pi-sum a b) (sum (lambda (x) (/ 1.0 (* x (+ x 2)))) a (lambda (x) (+ x 4)) b))
こうなるよと。
局所変数を作り出す let の使い方
ここでやっと局所変数が使えるように。この説明が無いためにどれだけ大変だったか。。。。
解説の、lambda 版と let 版のコードの構造がわかり辛かった(カッコ多すぎやねん!!)ので自分がわかりやすいように整形してみた。
lambda (define (f x y) ( (lambda (a b) (+ (* x (square a)) (* y b) (* a b)) ) (+ 1 (* x y)) (- 1 y) ) ) ) let (define (f x y) (let ( (a (+ 1 (* x y))) (b (- 1 y)) ) (+ (* x (square a)) (* y b) (* a b) ) ) )
問題解答
問1.34
(f f)
(f 2)
(2 2)
となってエラーになる。
何故ここでこの問題をするのか?という意図がわからない。