上一页 1 ··· 4 5 6 7 8 9 10 11 下一页
摘要: 练习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) 编辑
摘要: 练习2.53这些题都比较简单,我就直接贴出结果了。(ab c)( (george))((y1 y2) )(y1y2)#f#f(readshoed blue socks) 版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系... 阅读全文
posted @ 2015-02-22 14:06 nomasp 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 练习2.52在这道题上面的文字中就说到了用segments->painter提供线段表,这里的a小题的代码如下:(segments->painter (list(make-segment (make-vect 0.0 0.0)(make-vect 1.0 1.0))(make-segment .... 阅读全文
posted @ 2015-02-22 14:06 nomasp 阅读(117) 评论(0) 推荐(0) 编辑
摘要:  练习2.51通过书中前面的内容,我们知道below中来将框架分成上下两部分,而beside将框架分成左右两部分。因此,below定义如下:(define (below painter1 painter2)(let ((split-point (make-vect 0.0 0.5)))(l... 阅读全文
posted @ 2015-02-22 14:05 nomasp 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 练习2.50先来定义一个在水平方向上反转画家的函数。(define (flip-horiz painter)(transform-painter painter(make-vect 1.0 0.0)(make-vect 0.0 0.0)(make-vect 1.0 1.0)))(define (... 阅读全文
posted @ 2015-02-22 14:05 nomasp 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 练习2.48(define (make-segment start end)(list start end))(define (start-segment s)(car s))(define (end-segment s)(cadr s))练习2.49待填充 ... 阅读全文
posted @ 2015-02-22 14:04 nomasp 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 练习2.47这道题重点就是要理清楚list和cons的关系了。我们依次来写出过程函数。(define (make-frame origin edge1 edge2)(list origin edge1 edge2))(define (origin-frame f) (car f))(define... 阅读全文
posted @ 2015-02-22 14:04 nomasp 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 练习2.46这道题就是彻头彻尾的”构造”了。直接上代码吧。(define (make-vect xcor ycor) (listxcor ycor))(define (xcor-vect v) (car v))(define (ycor-vect v) (cdr v))(define (add-... 阅读全文
posted @ 2015-02-22 14:03 nomasp 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 练习2.45我们先将right-split和up-split抽象出一个split来。(define (split big-combinersmall-combiner)(lambda (painter n)(if (= n 0)painter(let ((smaller ((split big-... 阅读全文
posted @ 2015-02-22 14:03 nomasp 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 练习2.44这一小节的内容真是太抽象了。这道题就是要我们来类比前面的right-split函数了。(define (up-split painter n)(if (= n 0)painter(let ((smaller (up-split painter (- n 1))))(below pai... 阅读全文
posted @ 2015-02-22 14:02 nomasp 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 练习2.43因为对于(enumerate-interval 1 board-size),Louis的过程会产生(queen-cols (- k 1))个棋盘,而上一练习中给出的代码则只产生board-size个棋盘。上一练习中,如果board-size为8,则会产生行列均为1、2……8的8个棋盘... 阅读全文
posted @ 2015-02-22 14:02 nomasp 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 练习2.42这道题曾经在C#中写过,但是写出来的代码却没有Lisp中的朴素。用了一大堆的数组和for循环。但是在这里,用car、cdr来构造就行了。我们按书中给出的步骤来一步一步求解这个问题。首先是棋局,就按书上的示意图,从上往下的来排皇后的位置。诸如此时书中皇后的位置为:’(6 3 1 7 5... 阅读全文
posted @ 2015-02-22 14:01 nomasp 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 练习2.41这道题其实就是书中素数示例的变种,其本质是一样的。因此我们也按照同样的次序来完成这个过程。首先第一步,我们来完成生成3个相异整数构成的三元组。但在上一题中我们已经写出了能够产生2个相异整数构成的二元组了。因此我们只要多产生一个i,让其与产生的二元组结合,便能产生三元组了。那么,开工吧... 阅读全文
posted @ 2015-02-22 14:00 nomasp 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 练习2.40这道题要我们写一个传入一个整数n然后返回一个序对(i, j)的过程unique-pairs,然后用于上一页的prime-sum-pairs的定义。此时我们要注意在prime-sum-pairs中哪一段代码表达的是这个意思。没错,是flatmap函数。因此我们将其写入到unique-p... 阅读全文
posted @ 2015-02-22 14:00 nomasp 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 练习2.39通过前一习题的类比相信已经知道了fold-left和fold-right的内在意义,本题中要求的逆序数可以用cons来构造。具体为,先将list的第一个元素取出用(cons (car list) ‘() )构造,接着第二个、第三个……用(cons…… (cons (car (car ... 阅读全文
posted @ 2015-02-22 13:59 nomasp 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 练习2.38这道题比较有意思了,我们先来将fold-left和accumulate类比,accumulate是递归,而fold-left是迭代。前者通过不断地将(op result (car rest)变换成initial,通过将(cdr rest)变换成sequence,而rest一开始其实就... 阅读全文
posted @ 2015-02-22 13:59 nomasp 阅读(104) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 下一页