首页 > 其他 > 详细

【SICP练习】149 练习4.5

时间:2015-03-31 22:32:43      阅读:284      评论:0      收藏:0      [点我收藏+]

练习4-5

原文

Exercise 4.5. Scheme allows an additional syntax for cond clauses, ( => ). If evaluates to a true value, then is evaluated. Its value must be a procedure of one argument; this procedure is then invoked on the value of the , and the result is returned as the value of the cond expression. For example

(cond ((assoc ‘b ‘((a 1) (b 2))) => cadr)     
      (else false))

returns 2. Modify the handling of cond so that it supports this extended syntax.

分析

代码

 (define (extended-cond-syntax? clause) (eq? (cadr clause) ‘=>)) 
 (define (extended-cond-test clause) (car clause)) 
 (define (extended-cond-recipient clause) (caddr clause)) 
 (define (cond->if expr) 
         (expand-clauses (cond-clauses expr))) 

 (define (expand-clauses clauses) 
         (if (null? clauses)false 
                 (let ((first (car clauses)) 
                           (rest (cdr clauses))) 
                         (cond ((cond-else-clause? first) 
                                    (if (null? rest) 
                                            (sequence->exp (cond-actions first)) 
                                            (error "ELSE clause isn‘t last -- COND->IF" clauses))) 
                                   ((extended-cond-syntax? first) 
                                    (make-if (extended-cond-test first) 
                                                         (list (extended-cond-recipient first) 
                                                                   (extended-cond-test first)) 
                                                         (expand-clauses rest))) 
                                 (else  
                                         (make-if (cond-predicate first) 
                                                      (sequence->exp (cond-actions first)) 
                                                      (expand-clauses rest))))))) 

【SICP练习】149 练习4.5

原文:http://blog.csdn.net/nomasp/article/details/44782181

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!