yaotti's diary

Software is Eating the World

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