关闭

SICP 习题 (2.31)解题总结 : 通用的Square-Tree

SICP  习题 2.31 秉承该书一直以来的抽象作风,要求读者对习题2.30的结果进行抽象,使square-tree这种形式的过程更加通用。习题2.30中的square-tree只能对树状列表求平方,不能执行其他操作,但是我们可以发现其实使用map遍历树状列表的操作是通用的,只要我们将square换成其他过程就可以执行其他操作了。而Lisp里强大的将过程当做数据的功能可以帮助我们把square换...
阅读(949) 评论(0)

SICP 习题 (2.30)解题总结 : Square-Tree

SICP 习题 2.30 要求我们完成一个叫square-tree的过程,其作用和之前的square过程差不多,square过程是针对简单列表的,将列表中的所有元素求平方,然后返回新的平方数列表。不过square不能对嵌套列表进行处理,如果列表中还包含列表的话会报错。题目要求我们实现一个square-tree的过程,当输入的列表包含另一个列表时可以对嵌套的列表进行处理,生成所有列表元素的平方数。这...
阅读(1350) 评论(1)

SICP 习题 (2.29) 解题总结:二叉活动体

SICP 习题 2.29题目很长,实现起来有点繁琐,不过题目不难,花点时间还是容易完成的。题目引入了一个概念叫二叉活动体,这种东西有一个左分支,有一个右分支,每个分支包括一个长度和一个悬挂物,悬挂物可以是一个数,也可以是另一个二叉活动体。题中给出了二叉活动体的实现代码:(define (make-mobile left right) (list left right)) 也给出了分支的实现代码...
阅读(1326) 评论(1)

SICP 习题 (2.28)解题总结:树状列表的遍历

SICP  习题 2.28 的本质其实是树的遍历题目要求我们实现一个叫fringe的过程,fringe的英文意思是边缘,花边的意思,题目的意思其实就是要我们遍历一棵树,然后以列表的形式返回这棵树的所有叶子。该过程的实现和上面的deep-reverse差不多,都是遍历元素,如果元素是一个列表则递归调用fringe进入,如果元素是一个简单元素则直接组合起来。代码如下:(define (fringe i...
阅读(1359) 评论(1)

SICP 习题 (2.27)解题总结:树状列表的遍历

SICP 习题 2.27 又开始有些难度了,题目要求我们实现reverse的升级版deep-reverse,就是不仅要将一个列表的元素顺序倒过来,还要将列表中所有子列表的元素也倒过来。想清楚思路以后也不算太难,其实就是在对所有元素进行倒转的过程中加多一个判断,如果正在处理的元素是一个列表,则对该列表递归调用deep-reverse过程,如果正在处理的元素是一个简单的元素则直接返回该元素。我的代码如...
阅读(1227) 评论(1)

SICP 习题 (2.26)解题总结:列表操作符append cons list

SICP  习题 2.26 也是不需要太多解释的题目, 题目的主要目的是让读者理解append cons list三个操作的差别。直接运行下面代码中的start-test-2-26过程就可以了,需要留意一下的是append 过程, cons过程和list过程的使用。最好翻一下mit-schme的参考手册,对了,一直没有提mit-scheme的手册,建议大家去下载一份备用,需要的时候查一查链接如下:...
阅读(1751) 评论(5)

SICP 习题 (2.25)解题总结:列表的操作

SICP 习题 2.25 简单到不用解释题目要求我们使用car和cdr操作获得以下列表中的7:'(1 3 (5 7) 9) '((7)) '(1 (2 (3 (4 (5 (6 7))))))各位同学搞清楚car和cdr就可以简单完成了,代码如下:(define (start-test-2-25) (display (car (cdr (car (cdr (cdr '(1 3 (5 7) 9))...
阅读(1303) 评论(0)

Mac 上安装 Docker后启动boot2docker失败的问题

在Mac上安装Docker后,需要启动boot2docker加载VM后才能使用docker命令,不过我安装boot2docker后启动boot2docker出现一下错误:Waiting for VM and Docker daemon to start... .........................................................................
阅读(3642) 评论(0)

SICP 习题 (2.24)解题总结:列表的结构

SICP 习题 2.24 是列表的巩固题,让我们更清晰的理解列表。题目要求我们求如下表达式的值:(list 1 (list 2 (list 3 4)))因为我是一个程序员,这种事我不会自己求值的,我会让计算机完成。。。。在Scheme环境里运行以上表达式得到的结果是:(1 (2 (3 4)))这个结果并不意外,相对有经验的程序员大概可以才出来。题目后来还要求画一个盒子指针结构将以上数据解释成一棵树...
阅读(1786) 评论(0)

SICP 习题 (2.23)解题总结:for-each的实现

SICP 习题 2.23 要求我们实现一个for-each过程。for-each过程和map过程其实很像,只不过for-each过程不返回值,如果返回一个值的话也是不包含意义的值。map比较像一个加工厂,进去一堆东西,加工一下,出来另一堆东西。for-each更像一个蒸汽机,进去一堆煤,燃烧一下,产生能量干点活,不出来东西,真的一定要说有东西出来也是煤渣,大家不在乎的东西。所以for-each更关...
阅读(1541) 评论(0)

SICP 习题 (2.22)解题总结: 迭代过程中的列表处理

SICP 习题 2.22是习题2.21的后续题目,题目中讲到叫Louis Reasoner的人想重写suqare-list过程,希望使用迭代计算过程,而不是递归计算过程,有关迭代计算过程和递归计算过程,如果你没什么印象了,请翻回习题1.9 的解题总结看看。那个叫Louis Reasoner的人写的迭代版的suqre-list是这样的:(define (square-list-revert item...
阅读(2169) 评论(0)

SICP 习题 (2.21)解题总结: map的使用

SICP 习题 2.21 开始引入了map,准确来讲,是这道题目前的文章内容开始引入了map。为了完成本习题,甚至说为了完成本文以后的阅读,请读者一定要理解清楚map的概念,正如书中所说,“map是一种很重要的结构,不仅因为它代表了一种公共模式,而且因为它建立起了一种处理表的高层抽象”。虽然说得非常高大上,但是map的概念理解起来并不困难,最基本的理解就是给你一组东西,你对这组东西执行map操作的...
阅读(1476) 评论(0)

SICP 习题 (2.20)解题总结: 不确定数量参数

SICP 习题 2.20 引入了一种新的函数调用方式,就是带 . 符号的不确定参数调用方式。题中也讲到了, Scheme支持这种调用方式,如果我们把方法定义成下面这个样子(define (my-method first-p . others-p) ;….. ) 我们就可以在调用方法my-method时传入大于2的任何数量的参数,比如:(my-method 1 2 3 4 5 6)这时my-...
阅读(1395) 评论(0)

SICP 习题 (2.19) 解题总结:重写零钱兑换程序

SICP 习题2.19 要求我们重新设计1.2.2节的零钱兑换程序,要求我们可以轻易改变程序里用的兑换币种。我们先看看1.2.2节的零钱兑换程序,代码是这样的:(define (RMB-Change amount) (format #t "Changing ~S~%" amount) (cond ((= amount 0) 0) ((< amount 0) 0) (else (RMB-...
阅读(1935) 评论(0)

SICP 习题 (2.18) 解题总结:反转列表

SICP 习题 2.18 要求我们定义一个过程名叫reverse,可以将一个list反转过来。比如 (reverse (list 1 4 9 16 25)) 的结果是:(25 16 9 4 1)这道题和之前的2.17有相似之处,都是对list进行遍历,然后做相应处理。不过2.17比较简单,遍历到最后面返回最后的元素就好了,2.18复杂一点,需要在遍历之后将list元素反向组装起来。我们可以按以前的...
阅读(2233) 评论(1)
246条 共17页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:1473870次
    • 积分:15179
    • 等级:
    • 排名:第763名
    • 原创:246篇
    • 转载:0篇
    • 译文:0篇
    • 评论:724条
    博客专栏
    文章分类
    最新评论