<< Previous exercise (4.7) | Index | Next exercise (4.9) >>
meteorgan
(define (named-let? expr) (and (let? expr) (symbol? (cadr expr)))) (define (named-let-func-name expr) (cadr expr)) (define (named-let-func-body expr) (cadddr expr)) (define (named-let-func-parameters expr) (map car (caddr expr))) (define (named-let-func-inits expr) (map cadr (caddr expr))) (define (named-let->func expr) (list 'define (cons (named-let-func-name expr) (named-let-func-parameters expr)) (named-let-func-body expr))) (define (let->combination expr) (if (named-let? expr) (sequence->exp (list (named-let->func expr) (cons (named-let-func-name expr) (named-let-func-inits expr)))) (cons (make-lambda (let-vars expr) (list (let-body expr))) (let-inits expr))))
meteorgan