SICP Exercise 4.5

SICP Exercise 4.5

(define (expand-clauses clauses)
  (if (null? clauses)
      'false
      (let ((first (car clauses))
            (rest (cdr clauses)))
        (if (cond-else-clause? first)
            (if (null? rest)
                (sequence->exp (cond-actions first))
                (error "ELSE clause isn't last -- COND->IF"
                       clauses))
            (if (cond-=>-clause? first)
                (make-if (cond-predicate first)
                         (list (sequence->exp (cond-=>-actions first))
                               (cond-predicate first))
                         (expand-clauses rest))
                (make-if (cond-predicate first)
                         (sequence->exp (cond-actions first))
                         (expand-clauses rest)))))))
(define (cond-=>-clause? clause)
  (eq? (cadr clause) '=>))
(define (cond-=>-actions clause)
  (cddr clause))
运行结果如下:
;;; M-Eval input:
(cond ((assoc 'b '((a 1) (b 2))) => cadr) (else false))

;;; M-Eval value:
2
运行提示:

1,需要在run_eval文件中加载下列文件,代码如下:

(load "apply.rkt")
(load "data_structure.rkt")
(load "representation.rkt")
(load "exercise4.3.rkt") ;;这样就可以利用数据导向的分派方式
(load "exercise4.5.rkt")
2,需要在基本过程中加入assoc和cadr:

(define primitive-procedures
  (list (list 'car car)
        (list 'cdr cdr)
        (list 'cadr cadr)
        (list 'cons cons)
        (list 'null? null?)
        (list '+ +)
        (list 'list list)
        (list 'display display)
        (list 'assoc assoc)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值