SICP Exercise 4.8

SICP Exercise 4.8

;(define (fib n)
;  (let fib-iter ((a 1)
;                 (b 0)
;                 (count n))
;    (if (= count 0)
;        b
;        (fib-iter (+ a b)
;                  a
;                  (- count 1)))))

;(define (fib n)
;  (define (fib-iter a b count)
;    (if (= count 0)
;        b
;        (fib-iter (+ a b) a (- count 1))))
;  (fib-iter 1 0 n))

(define (let->define exp)
  (let ((name (cadr exp))
        (bindings (caddr exp))
        (body (cdddr exp)))
    (sequence->exp
     (list (make-define name
                  (map car bindings) ;vars
                  body)
           (cons name 
                 (map cadr bindings)))))) ;vals

(define (make-define name paras body)
  (cons 'define 
        (cons (cons name paras)
              body)))

(define (eval-let exp env)
  (if (pair? (cadr exp))
      (eval (let->lambda exp) env)
      (eval (let->define exp) env)))

(put 'let eval-let)     


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值