zoukankan      html  css  js  c++  java
  • 【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


    版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。

  • 相关阅读:
    JavaScript自定义事件
    用Java构建一个简单的WebSocket聊天室
    PHP实现支付宝小程序用户授权的工具类
    jq ajax超时设置
    gulp使用笔记
    vue学习—组件的定义注册
    echarts设置线条粗细
    求js数组的最大值和最小值
    js删除数组中的 "NaN"
    jq方法(end)
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786047.html
Copyright © 2011-2022 走看看