nomasp

風立ちぬ、いざ生きめやも」

【SICP练习】81 练习2.53

练习2.53 这些题都比较简单,我就直接贴出结果了。 (ab c) ( (george)) ((y1 y2) ) (y1y2) #f #f (readshoed blue socks)

2015-02-22 14:06:50

阅读数 1657

评论数 0

【SICP练习】80 练习2.52

练习2.52 在这道题上面的文字中就说到了用segments->painter提供线段表,这里的a小题的代码如下: (segments->painter (list(make-segment (make-vect 0.0 0.0)                         ...

2015-02-22 14:06:24

阅读数 1199

评论数 0

【SICP练习】79 练习2.51

练习2.51 通过书中前面的内容,我们知道below中来将框架分成上下两部分,而beside将框架分成左右两部分。因此,below定义如下: (define (below painter1 painter2)   (let ((split-point (make-vect 0.0 0.5))...

2015-02-22 14:05:56

阅读数 2461

评论数 0

【SICP练习】78 练习2.50

练习2.50 先来定义一个在水平方向上反转画家的函数。 (define (flip-horiz painter)   (transform-painter painter                      (make-vect 1.0 0.0)                  ...

2015-02-22 14:05:36

阅读数 1963

评论数 0

【SICP练习】77 练习2.48-2.49

练习2.48 (define (make-segment start end)    (list start end)) (define (start-segment s)    (car s)) (define (end-segment s)    (cadr s))   练习2...

2015-02-22 14:04:49

阅读数 1869

评论数 0

【SICP练习】76 练习2.47

练习2.47 这道题重点就是要理清楚list和cons的关系了。我们依次来写出过程函数。 (define (make-frame origin edge1 edge2)    (list origin edge1 edge2)) (define (origin-frame f) (car ...

2015-02-22 14:04:11

阅读数 1828

评论数 0

【SICP练习】75 练习2.46

练习2.46 这道题就是彻头彻尾的”构造”了。直接上代码吧。 (define (make-vect xcor ycor) (listxcor ycor)) (define (xcor-vect v) (car v)) (define (ycor-vect v) (cdr v)) (def...

2015-02-22 14:03:36

阅读数 2192

评论数 0

【SICP练习】74 练习2.45

练习2.45 我们先将right-split和up-split抽象出一个split来。 (define (split big-combinersmall-combiner)    (lambda (painter n)        (if (= n 0)            pain...

2015-02-22 14:03:22

阅读数 1841

评论数 0

【SICP练习】73 练习2.44

练习2.44 这一小节的内容真是太抽象了。这道题就是要我们来类比前面的right-split函数了。 (define (up-split painter n)     (if (= n 0)        painter         (let ((smaller (up-split ...

2015-02-22 14:02:35

阅读数 2293

评论数 0

【SICP练习】72 练习2.43

 练习2.43 因为对于(enumerate-interval 1 board-size),Louis的过程会产生(queen-cols (- k 1))个棋盘,而上一练习中给出的代码则只产生board-size个棋盘。上一练习中,如果board-size为8,则会产生行列均为1、2…...

2015-02-22 14:02:10

阅读数 1738

评论数 0

【SICP练习】71 练习2.42

 练习2.42 这道题曾经在C#中写过,但是写出来的代码却没有Lisp中的朴素。用了一大堆的数组和for循环。但是在这里,用car、cdr来构造就行了。 我们按书中给出的步骤来一步一步求解这个问题。首先是棋局,就按书上的示意图,从上往下的来排皇后的位置。诸如此时书中皇后的位置...

2015-02-22 14:01:26

阅读数 1852

评论数 0

【SICP练习】70 练习2.41

练习2.41 这道题其实就是书中素数示例的变种,其本质是一样的。因此我们也按照同样的次序来完成这个过程。首先第一步,我们来完成生成3个相异整数构成的三元组。但在上一题中我们已经写出了能够产生2个相异整数构成的二元组了。因此我们只要多产生一个i,让其与产生的二元组结合,便能产生三元组了。那么,开工...

2015-02-22 14:00:41

阅读数 1807

评论数 0

【SICP练习】69 练习2.40

 练习2.40 这道题要我们写一个传入一个整数n然后返回一个序对(i, j)的过程unique-pairs,然后用于上一页的prime-sum-pairs的定义。此时我们要注意在prime-sum-pairs中哪一段代码表达的是这个意思。没错,是flatmap函数。因此我们将其写入...

2015-02-22 14:00:03

阅读数 1612

评论数 0

【SICP练习】68 练习2.39

 练习2.39 通过前一习题的类比相信已经知道了fold-left和fold-right的内在意义,本题中要求的逆序数可以用cons来构造。具体为,先将list的第一个元素取出用(cons (car list) ‘() )构造,接着第二个、第三个……用(cons …… (co...

2015-02-22 13:59:37

阅读数 1436

评论数 0

【SICP练习】67 练习2.38

练习2.38 这道题比较有意思了,我们先来将fold-left和accumulate类比,accumulate是递归,而fold-left是迭代。前者通过不断地将(op result (car rest)变换成initial,通过将(cdr rest)变换成sequence,而rest一开始其...

2015-02-22 13:59:27

阅读数 1308

评论数 0

【SICP练习】66 练习2.37

 练习2.37 这道题花了我太长的时间了,一开始我就把题目中的m看成了w。然后题中给出的dot-product的两个参数我还以为一个是向量另一个是矩阵。怎么算都算不出来,直到看到“返回求和...”里的w只有一个i而没有j。好了,那么开始按照题目的要求来做题了。 既然发现了自己...

2015-02-22 13:58:38

阅读数 1269

评论数 0

【SICP练习】65 练习2.36

练习2.36 虽然accumulate正在变得越来越复杂,但我还并未完全领悟到它的深刻意义。不过直觉告诉对于序列的序列,我们要做的是依次取出它每个序列的第一个元素。此方法来源于网络,我一直都是想着用lambda来写,最后感觉太复杂了。没想到一个map就解决了问题。 Lisp中的高阶函数果然不仅...

2015-02-22 13:58:05

阅读数 1652

评论数 0

【SICP练习】64 练习2.35

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

2015-02-22 13:57:27

阅读数 1294

评论数 0

【SICP练习】63 练习2.34

练习2.34 书中一开始有2个式子,一个是原式,一个根据Horner规则构造出的式子。而我们同样也可以将待求得式子写成这种方式,而且可以更进一步——那就是写成Lisp的前序表示: (+ 1 (* x (+ 3 (* x (+ 0 (* x (+ 5 (* x(+ 0 x) ) ) ) ) ) ...

2015-02-22 13:57:14

阅读数 1616

评论数 0

【SICP练习】62 练习2.33

练习2.33 既然要用到accumulate,那么我们先来回顾一下这个函数好了。其有三个参数,一个操作符,一个用来作为初始化的值,一个是需要运算的序列。题目中的map已有的定义如下: (define (map p sequence)    (accumulate (lambda (x y) ...

2015-02-22 13:56:24

阅读数 1456

评论数 0

提示
确定要删除当前文章?
取消 删除