SICP练习149 练习4.5

Posted claireyuancy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SICP练习149 练习4.5相关的知识,希望对你有一定的参考价值。

练习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)))))))



感谢您的訪问,希望对您有所帮助。

欢迎大家关注或收藏、评论或点赞。


为使本文得到斧正和提问。转载请注明出处:
http://blog.csdn.net/nomasp


以上是关于SICP练习149 练习4.5的主要内容,如果未能解决你的问题,请参考以下文章

课堂练习

课堂小练习(complex类)

loj10141. 「一本通 4.5 练习 3」染色

你会用哪种语言自学SICP? [关闭]

loj10139. 「一本通 4.5 练习 1」树上操作(loj2125. 「HAOI2015」树上操作 )

csharp Epicor标准练习片段