摘要: 练习2.70既然要解码,那必须先将树给定义好了。(define tree (generate-huffman-tree ‘((A 2) (NA 16) (BOOM 1) (SHA 3) (GET 2) (YIP 9) (JOB 2) (WAH 1))然后就是来编码题目中给出的歌词了。... 阅读全文
posted @ 2015-03-05 10:50 nomasp 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 练习2.69如题目中所说,传入给successive-merge的参数是一个有序的集合。而这个函数将通过不断的归并得到最终的一个元素。如果传入的集合为0,也就是说返回的表应该是空表。如果传入的集合为1,那么将传入的集合的car部分取出来,这就是Huffman树了。而如果传入的集合大于... 阅读全文
posted @ 2015-03-05 10:50 nomasp 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 练习2.68先要导入练习2.67中的sample-tree。这道题要求我们写出能够根据给定的树产生出给定符号的二进制位表的函数encode-symbol,这个函数还要能够在遇到未在树中出现的符号时报错。这个函数将要在给定的树中查找给定符号的叶子节点,并记录下寻找过程中的左右方向,当然... 阅读全文
posted @ 2015-03-05 10:49 nomasp 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 练习2.67我们先来把该导入的导入,然后就来测试了。(load "d:\\lisp\\tree.scm")(define sample-tree (make-code-tree (make-leaf 'A 4) (make-code-tree (make-leaf... 阅读全文
posted @ 2015-03-05 10:49 nomasp 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 练习2.66这道题相当于二叉树在实际工程中的一个运用,我们依旧要用到前面所学到的三个过程:entry, left-branch, right-branch。这三者的作用分别是取出结点、左分支、右分支。而根据题目要求,这里还需要一个获取键值的key。当然了,就像书中上文所展示的那样,k... 阅读全文
posted @ 2015-03-05 10:48 nomasp 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 练习2.65最后一道题了,来个总结倒是很不错。要完成两个函数,我们就要用到前面所学,首先用练习2.63中的函数将树变成表,这样有利于后续的处理,而根据前面的习题,用tree->list-2会更加快速。然后要实现并集或补集的功能,也要用到第104页相关的函数。题目要求的是平衡二叉树,因... 阅读全文
posted @ 2015-03-05 10:47 nomasp 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 练习2.64一开始list->tree会调用partial-tree,而后者会将每次传入的表分成两部分,然后组合成一个平衡树。中间运用了迭代的技巧,而这是让众多树枝产生的源泉。如果我们对前面的表’(1 3 5 7 9 11)做计算,返回的结果将会是: (5 (1 () (3 () (... 阅读全文
posted @ 2015-03-05 10:46 nomasp 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 练习2.63这两段代码的区别在于第二段用了迭代,相信可以大大减少计算时间。那么还是先来测试第一小题。需要的代码大家先敲进去。然后来定义图2-16中的三棵树了。(define tree-1 (make-tree 7 (make-tree 3 ... 阅读全文
posted @ 2015-03-05 10:45 nomasp 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 练习2.62前面已经遇到过了,union-set是用来取并集的。我们要通过多种情况来完成这个程序。(define (union-set set1 set2) (cond ((and (null? set1) (null? set2)) '()) ((nul... 阅读全文
posted @ 2015-03-05 10:44 nomasp 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 练习2.60这里的adjoin-set通过遍历后使用cons将表进行不断的组合,并在组合的过程中将x加到集合中去。(define (adjoin-set x set) (if (null? set) (list x) (let ((current-eleme... 阅读全文
posted @ 2015-03-05 10:43 nomasp 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 练习2.59我们可以采用迭代来完成这个过程,至于怎么迭代的,接下来就是代码了。(define (union-set set1 set2) (define (union-set-iter set1 set2) (if (null? input) ... 阅读全文
posted @ 2015-03-05 10:40 nomasp 阅读(76) 评论(0) 推荐(0) 编辑
摘要: 练习2.58如果要由前序变成中序那就要有些大变动了。(define (make-sum a1 a2) (cond ((=number? a1 0) a2) ((=number? a2 0) a1) ((and (number? a1) (number?... 阅读全文
posted @ 2015-03-05 10:40 nomasp 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 练习2.57看到题目中的能处理任意项就赶紧这道题挺难的,同时也想到了前面学过但还没怎么用过的点参数。题目中要能求和还能求乘积。我们先来写求和的函数吧。(define (make-sum a1 . a2)(if (single-operand? a2) (let ((a2 (car... 阅读全文
posted @ 2015-03-05 10:38 nomasp 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 这道题的代码略长啊。不过我也是因此而知道Edwin上的代码居然可以复制到word上,以前还想当然的以为不能复制的,毕竟在Edwin上粘贴用的Ctrl+Y,而不是Ctrl+V。在这里我就只将书上没有的代码贴出来了。(define (deriv exp var) (cond ((nu... 阅读全文
posted @ 2015-03-05 10:36 nomasp 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 练习2.55 书上已经说过了在求值过程中引号会被替换成quote。因为表达中有2个单引号,因此car得到了第二个单引号。如果是cdr则会得到后面的一串字母。(cdr ‘’abracadabra);Value: (abracadabra) ... 阅读全文
posted @ 2015-03-05 10:34 nomasp 阅读(91) 评论(0) 推荐(0) 编辑
摘要: 这些关于Scheme的基本知识在【Scheme归纳】系列博文总都有介绍。(define (equal? x y) (cond ((and (symbol? x) (symbol? y)) (symbol-equal? x y)) ... 阅读全文
posted @ 2015-03-05 10:05 nomasp 阅读(97) 评论(0) 推荐(0) 编辑