本文
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)
となってエラーになる。
何故ここでこの問題をするのか?という意図がわからない。