
SICP
evanoma
d-y-chp@live.cn
展开
-
SICP 1.3
返回3个中较大的两个参数的平方之和 开始想用if或者cond编写该程序,但是代码显得比较繁琐。参考后构造抽象屏障(define (square x) (* x x))(define (sum-of-squares x y) (+(square x) (square y)))先定义求平方和的函数(define (bigger x y) (if (> x y) x原创 2017-04-18 09:16:39 · 238 阅读 · 0 评论 -
SICP 1.6
题目定义了一个自己的if函数(define (new-if predicate then-clause else-clause) (cond (predicate then-clause) (else else-clause)))问和if函数的区别。首先根据练习1.5的程序(define (p)(p))(define (text x y) (if (= x 0)原创 2017-04-18 15:09:19 · 329 阅读 · 0 评论 -
SICP 1.11
线性递归:书中P21的代换模型看到伸展和收缩两个阶段,且伸展阶段所需的额外存储量和计算所需的步数都正比于参数 线性迭代:P22只使用常量存储大小,且计算所需的步骤正比于参数树形递归:单纯按照数学上的解法,对最终结果进行逆推,其前面的每个部分需要更前面的部分进行分解。为了减少计算所需的空间,采用自底至上的迭代方法。从树变成一条直线。 此解法一般需要一个变量存储计算次数;另外几个变量存储中间变量,每经原创 2017-04-19 15:20:30 · 371 阅读 · 0 评论 -
SICP 1.6
要求产生时间复杂度为logn的求幂程序 对幂数n分2种情况讨论,当n为偶数或者奇数两种情况讨论,并设置变量a存储迭代的计算结果。(define (fast-expt b n) (expt-iter b n 1))(define (expt-iter b n a) (cond ((= n 0) a) ((even? n)原创 2017-04-25 09:26:34 · 201 阅读 · 0 评论 -
SICP 1.22
search-for-primes 函数接受参数 n ,找出大于等于 n 的三个素数,并且返回运行时间。 首先定义函数 next-odd 接受一个参数 n ,生成跟随在 n 之后的第一个奇数:(define (next-odd n) (if (odd? n) (+ 2 n) (+ 1 n)))直接重用书本 33 页的 prime? 函数检测给定数是否为素数原创 2017-04-27 10:10:37 · 268 阅读 · 0 评论 -
SICP 1.38
先确定Ni和Di的值:(define (N i) 1) (define (D i) (if (= 0 (remainder (+ i 1) 3)) (* 2 (/ (+ i 1) 3)) 1))写出无穷连分式的迭代算法用于计算e的小数部分: 通过定义过程f(将N,D改为(N i),(D i))(define (原创 2017-04-27 17:31:29 · 240 阅读 · 0 评论