zoukankan      html  css  js  c++  java
  • 【SICP练习】64 练习2.35

    

    练习2.35

    这道题中已经给定了accumulatemap,根据accumulate的参数可以很容易的知道题目中的2处需要我们补充的:(accumulate + 0 (map ...... 因为我们是要累加所有的树叶,这里就需要在map里有一个lambda来讲t中的树叶全部遍历出来,map的第二个参数自然就是t了。

    而遍历t的过程中,遇到的节点有可能只是一片树叶,但也有可能是有两个分支。而如果是分支的话,我们又可以让其用count-leaves递归回来。至于判断是树叶还是分支,我们在前面已经遇到过许多次这种问题,用谓词pair?即可。

    (define (count-leaves t)

       (accumulate + 0 (map (lambda (sub-t)

                                  (if (pair? sub-t)

                                     (count-leavessub-t)

                                      1))

                                t)))

    这个过程比起前面几道题就稍微有点宏伟了,来测试一下吧。

    (count-leaves ‘(1 2 (3 (4 ( ( (5 ) 6)(7) ( (8 ) 9) 10) ) ) 11) )

    ;Value: 11

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

  • 相关阅读:
    C++标准库之泛型算法
    auto 和 decltype (C++11 新增)
    C++ primer学习记录(个人猜想未测试版本)
    linux学习笔记之文件类型,及目录介绍
    crontab指令详解
    linux学习笔记之硬盘分区
    内存知识整理。
    JSON格式
    DuiLib(四)——控件绘制
    DuiLib(三)——控件消息
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786155.html
Copyright © 2011-2022 走看看