SICP 4.7

原创
2017/12/17 20:24
阅读数 36

题目的例子等价于:

(let ((x 3))
  (let ((y (+ x 2)))
    (let ((z (+ x y 5)))
      (* x z))))

于是代码如下:

(define (make-let bindings body)
    (cons 'let (cons bindings body)))

(define (let*->nested-lets exp)
  (define (expand-let* bindings body)
    (if (null? bindings)
        body
        (list (make-let (list (car bindings))
                        (expand-let* (cdr bindings) body)))))
  (car (expand-let* (cadr exp) (cddr exp))))

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部