EoPL reading (31) 1.3.1 Free and Bound Variables

Exercise-1.24

とりあえず、let を盛り込む方向で。let 式は lambda に書き換え可能。例えば以下だと

(let ((x 2)) (* x x))

以下と同じ。

((lambda (x) (* x x)) 2)

SICP 式で言えば書き換えて評価機 (?) に再度吸わせれば良い。
面倒臭いので自分ブログ検索。let->combination 手続きは

あるいは let*->nested-let は

に記述があるのでこれをパクる。make-lambda 手続きは

に記述あり。

(define (make-lambda parameters body)
 (cons 'lambda (cons parameters body)))

上記カンニングにて実装は楽なんですが、試験をどうするか。正直試験を自動で出力するナニが欲しいです。やろうと思えばできるのか。
って、試験見てみたら let にできる式が皆無な事が判明。でも自動で何とかしようとすれば何とかなるのか。正直引数に渡す値はどうでも良いのであればなんとかなるのかなぁ。とりあえず、test* で始まるリストから

gosh> (define l '(test* "(occurs-free? 'x '(lambda (y) ())) should return #f"
       #f
       (occurs-free? 'x '(lambda (y) ()))))
l
gosh> (car (cddr (car (cdddr l))))
'(lambda (y) ())
gosh>

で取り出せる。これを let に戻さないといかんのか。とりあえず明日早起きらしいんで今日はこれで止めます。