4章のmake-lambdaについて
make-lambdaはlambda式を作る手続き。
例えば
(lambda (x y) (+ x y))
というlambda式(S式)を作る。
本では
(define (make-lambda parameters body) (cons 'lambda (cons parameters body)))
となっていたけれど、自分は
(define (make-lambda parameters body) (list 'lambda parameters body))
じゃないか?と思った。
他の手続き(make-ifとか)はただのlistだし。
(cons 'lambda (cons parameters body)))だったら、例えば上の式は
(cons 'lambda (cons '(x y) '(+ x y)))
となる。これだと
(lambda (x y) . (+ x y))
となるんじゃない?という。
これは間違いで、
(cons 'lambda (cons '(x y) (list '(+ x y))))
つまりbodyはリスト。
そういえば
(define (square x) (newline) (set! x (+ x 1)) (* x x))
なんて定義もできる。
基本なのになー。まだまだですね:p