SICP
文章平均质量分 52
zzljlu
这个作者很懒,什么都没留下…
展开
-
SICP section 1.1
1.5 Ben Bitdiddle发明了一种检测解释器究竟采用哪种顺序求值的方法,应用序还是正则序:(define (p y) (p y))(define (test x y) (if (= x 0) 0 y))(test 0 (p 1)) 上面的过程p,我稍稍做了修改,因为我的解释器(DrScheme)不能够定义没有参数的过程,下面解释这如何根据表达式:(test 0 (p 1))的结果,判断解释器的求值顺序。如果解释器采用正则序,那么(test 0 (p 1))原创 2011-02-27 14:04:00 · 897 阅读 · 0 评论 -
SICP Exercise 4.1
SICP Exercise 4.11,用let表达式去控制求值的顺序:(define (list-of-values-left-to-right exps env) (if (no-operands? exps) '() (let ((firs原创 2011-08-24 10:36:17 · 892 阅读 · 0 评论 -
SICP Section 2.3.2
本节内容中用的程序代码如下:(define (deriv exp var) (cond ((number? exp) 0) ((variable? exp) (if (same-variable? exp var) 1 0)) (原创 2011-04-23 15:07:00 · 782 阅读 · 0 评论 -
SICP Exercise 4.2
SICP Exercise 4.2a)由于eval中把过程应用放在最后面检查,就可以简单的认为到达此处的任意复合表达式就是过程应用:(define (application? exp) (pair? exp))所以如果把过程应用放到赋值前面之后,所有的赋值等语句将被认原创 2011-08-24 14:29:55 · 754 阅读 · 0 评论 -
SICP Exercise 4.8
SICP Exercise 4.8;(define (fib n); (let fib-iter ((a 1); (b 0); (count n)); (if (= count 0);原创 2011-09-23 22:37:52 · 702 阅读 · 0 评论 -
SICP Exercise 4.7
SICP Exercise 4.7a)为什么let*表达式可以重写为一些嵌套的let表达式?因为嵌套的let表达式可以让已经做了的约束都是可见的。例如:(let* ((x 3) (y (+ x 2)) (z (+ x y 5)))原创 2011-09-23 22:34:16 · 924 阅读 · 0 评论 -
SICP Exercise 4.9
SICP Exercise 4.9;(for ; (define i 0); (< i 10); (set! i (+ i 1)); (display i));(for )(define (for-init exp) (cadr exp))(原创 2011-09-23 23:06:18 · 880 阅读 · 0 评论 -
SICP Exercise 4.12
SICP Exercise 4.12在这个练习中我们使用框架原有的表示,即把框架表示为表的序对,而不是练习4.11中的方式。为了把环境的遍历和框架的遍历分开,我增加了两个过程,如下:(define (scan var frame) "在框架frame中查找var,原创 2011-09-24 10:59:53 · 1023 阅读 · 0 评论 -
SICP Exercise 4.5
SICP Exercise 4.5(define (expand-clauses clauses) (if (null? clauses) 'false (let ((first (car clauses)) (rest (原创 2011-08-28 15:07:01 · 712 阅读 · 0 评论 -
SICP 第4章求值器完整代码
如果我们可以立即看到自己修改求值器后的运行结果,那将极大的激发我们的兴趣,所以这里给出第4章4.1节中元循环求值器的完整代码,这样在做练习提时,我们立马就可以看到其效果。在这里,我们求值器分为6个部分,它们分别是:evalapplydata_structurere原创 2011-08-28 18:17:43 · 1157 阅读 · 0 评论 -
SICP Exercise 4.6
SICP Exercise 4.6;(let ((var1 val1) (var2 val2) ...) body)(define (let->lambda exp) (let ((vars (let-vars exp)) (vals (let-vals原创 2011-08-28 19:00:21 · 605 阅读 · 0 评论 -
SICP Exercise 4.3
Exercise 4.3在这个练习中,我需要一些对表的操作,下面就是关于表的操作:(define (make-table) (let ((local-table (list '*table*))) (define (assoc key records)原创 2011-08-27 17:02:16 · 863 阅读 · 0 评论 -
SICP Exercise 4.4
SICP Exercise 4.4a)因为数据导向的方式增加起来比较方便,所以我们继续采用联系4.3中的方式:(define (eval-and exp env) (define (and-loop exps env) (if (null? exps)原创 2011-08-27 22:19:41 · 713 阅读 · 0 评论 -
SICP Exercise 4.14
Exercise 4.141、Eva的map能够工作是应该的,因为Eva在求值器中定义了map。2、那么Louis的map为什么不能工作呢?首先,让我们来看一下map的基本使用方式(在scheme中,而不是在求值器中):(map (lambda (x) (* 2 x)) '(1 2 3 4))=> (2 4 6 8)可以看出map函数的使用方式和其他作为基本过程安装的函数(如原创 2012-05-30 22:41:10 · 1393 阅读 · 0 评论 -
SICP Exercise 4.13
;; Exercise 4.13我认为make-unbound!应该只删除第一个frame里面的约束。我的原因有一下几点:1,make-unbound!和define对应,前者是删除约束,而后者是添加约束(有时是改变已有的约束)。define是在第一个frame中定义约束,所以make-unbound!也应该是从第一个框架中删除约束。2,根据封装的原则,不应该在当前enviro原创 2012-05-30 21:08:36 · 1233 阅读 · 0 评论 -
SICP Exercise 4.16
首先,我们先定义一下关于unassigned的定义和函数:;;Representing unassigned constant(define UNASSIGNED (quote '*unassigned*))(define (unassigned? val) (eq? val '*unassigned*))1、修改lookup-variable-value,这个比较简单,原创 2012-05-31 21:53:33 · 1262 阅读 · 0 评论 -
SICP Exercise 4.15
这是图灵在他的论文中提到的停机定理:证明:我们不可能写出一个过程halts?,使它能正确的对任何过程p和p的参数a,判断出p对a是否终止。证明思路:假设我们能写出这样的过程halts?,然后我们去构造一个过程,使得其结果与我们的假设矛盾。下面就是图灵构造的能够引出矛盾的过程:1 (define (run-forever) (run-forever))2 (define (try p)原创 2012-06-02 11:16:08 · 1283 阅读 · 2 评论 -
SICP Exercise 3.38
SICP Exercise 3.37a) I list all the orders of the three process, and then determine the value of balance. For simplicity, I use 1, 2, 3 , in原创 2011-07-13 14:20:17 · 662 阅读 · 0 评论 -
SICP Exercise 3.53
Exercise 3.53方法一:s的第1个元素是1,其余部分是s与s之和。这样s的第2个元素就是1加上1,即为2。第3个元素是2加上2,即为3。如此继续下去,得到s为(1 2 4 8 16 ...)。方法二:(http://wqzhang.wordpress.com/2009原创 2011-07-17 12:00:45 · 594 阅读 · 0 评论 -
SICP Exercise 3.55
Exercise 3.55从上图中可以看到,partial-sums的第i个元素等于其第(i-1)个元素加上stream的第i个元素。所以代码如下:(define (partial-sums s) (cons-stream (stream-car s)原创 2011-07-17 14:30:22 · 906 阅读 · 1 评论 -
SICP section 1.2
1.16(define (fast-expt b n) (fast-expt-iter b n 1))(define (fast-expt-iter b n a) (cond ((= n 0) a) ((even? n) (fast-expt-iter (* b b) (/ n 2) a)) (else (fast-expt-iter b (- n 1) (* b a)))))原创 2011-03-16 10:37:00 · 1056 阅读 · 0 评论 -
SICP section 2.2
(define one-through-four (list 1 2 3 4));Exercise 2.17(define (last-pair list) (let ((tail (cdr list))) (if (null? tail) list (last-pair tail))));(last-pair (list 23 72 149 34));(last-pair (list (list 1 2) (list 3 4)));E原创 2011-03-31 20:12:00 · 866 阅读 · 0 评论 -
SICP Exercise 3.11
1,The result of (define acc (make-account 50)):2, Environments when evaluating ((acc 'deposit) 40):3, Result of ((acc 'deposit) 40):4, Envi原创 2011-07-06 16:39:44 · 864 阅读 · 0 评论 -
SICP Exercise 3.22
;;;QUEUE as a procedure with local state(define (make-queue) (let ((front-ptr nil) (rear-ptr nil)) (define (dispatch m)原创 2011-07-07 11:51:16 · 846 阅读 · 0 评论 -
SICP Exercise 3.15
SICP Exercise 3.15原创 2011-07-06 20:55:16 · 901 阅读 · 0 评论 -
SICP Exercise 3.25
SICP Exercise 3.25This exercise is a little more difficult. I use a list as the key, the following diagram will help you to write correct co原创 2011-07-07 22:07:23 · 827 阅读 · 0 评论 -
SICP Exercise 3.29
SICP Exercise 3.29we know that A or B is equivalent to not ((not A) and (not B)) from Using De-Morgan’s rules. the diagram is:so, the code i原创 2011-07-08 14:19:17 · 725 阅读 · 0 评论 -
SICP Exercise 3.28
SICP Exercise 3.28This exercise is easy.;Exercise 3.28(define (or-gate in1 in2 out) (define (and-action-procedure) (let ((new-value (原创 2011-07-08 14:10:25 · 627 阅读 · 0 评论 -
SICP Exercise 3.34
SICP Exercise 3.34(define (squarer a b) (multiplier a a b))The flaw is that: suppose we set the value of b to 9, but we cannot sets the原创 2011-07-13 09:46:19 · 567 阅读 · 0 评论 -
SICP Exercise 3.33
SICP Exercise 3.33This is similar as the celsius-fahrenheit-converter procedure.;;;Exercise 3.33;;;average(define (averager a b c) (let原创 2011-07-13 09:23:22 · 715 阅读 · 0 评论 -
SICP Exercise 3.35
;;;Exercise 3.35(define (squarer a b) (define (process-new-value) (if (has-value? b) (if (< (get-value b) 0) (err原创 2011-07-13 09:50:36 · 592 阅读 · 0 评论 -
SICP Exercise 3.37
SICP Exercise 3.37;;;Exercise 3.37(define (c+ x y) (let ((z (make-connector))) (adder x y z) z))(define (c- x y) (let ((z (ma原创 2011-07-13 10:00:56 · 743 阅读 · 0 评论 -
SICP Exercise 3.50
SICP Exercise 3.50(define (stream-map proc . argstreams) (if (stream-null? (car argstreams)) the-empty-stream (cons-stream原创 2011-07-15 15:26:50 · 783 阅读 · 0 评论 -
SICP Exercise 3.51
SICP Exercise 3.51> (define x (stream-map show (stream-enumerate-interval 0 10)))0> (stream-ref x 5)123455> (stream-ref x 7)677其原创 2011-07-15 16:04:09 · 826 阅读 · 0 评论 -
SICP Exercise 3.52
seq的内容正常应该是(1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 153 171 190 210),其中第i个值是由1到i的和而得到的。> (define sum 0)> sum0> (define (accum x)原创 2011-07-15 16:31:32 · 949 阅读 · 0 评论 -
SICP Exercise 3.54
Exercise 3.54;;Exercise 3.54(define (mul-streams s1 s2) (stream-map * s1 s2))(define factorials (cons-stream 1 (mul-streams (integers-st原创 2011-07-17 12:06:23 · 598 阅读 · 0 评论 -
计算机程序的构造与解释(SICP)
计划用半年的时间把《计算机程序的构造与解释》这本书读完,并完成一半以上的习题。所用的软件:系统:windows xp解释器:DrRacket, version 5.1语言:SICP(PLaneT 1.13) ,如何获得该语言,请看这里。习题答案目录:第1章 构造过程抽象1.1节 程序设计基本元素1.2节 过程与它们所产生的计算第2章 构造数据抽象原创 2011-03-16 19:25:00 · 2515 阅读 · 0 评论