zl程序教程

sicp 3.9题解答

  • sicp习题2.2节尝试解答

    sicp习题2.2节尝试解答

      (define (reverse-iter i k)     (if (null? i) k (reverse-iter (cdr i) (cons (car i) k))))   (reverse-iter items ())) 习题2.20,如果两个数的奇偶相同,那么他们的差模2等于0,根据这一点可以写出: (define (same-parity a . b)   (defin

    日期 2023-06-12 10:48:40     
  • sicp习题2.33-2.39尝试解答

    sicp习题2.33-2.39尝试解答

    这一节的内容非常有趣,通过将序列作为interface,在此基础上进而提取出各种高阶操作(map,filter,accumulate,enumerate等),由此引出模块化设计的讨论。模块化设计带来复杂性的降低,同时可能引入性能上的损失,比如书中对sum-odd-squares过程的两种写法,原来的写法枚举列表元素的过程散落在累积、过滤、映射的过程中,主要一次循环就够了,而通过三个高阶过程来操作

    日期 2023-06-12 10:48:40     
  • sicp 2.3小结习题尝试解答

    sicp 2.3小结习题尝试解答

     习题2.2没有全部做,我读书的速度远远超过做习题的进度,没办法,时间有限,晚上的时间基本用来看书了,习题也都是在工作间隙做的,慢慢来了,前两章读完再总结下。回到2.3节,这一节在前几节介绍数值型符号数据的基础上引入了符号数据,将任意符号作为数据的能力非常有趣,并给出了一个符号求导的例子,实在是太漂亮了。 习题2.53,直接看结果:  (list a b c)(a b c)  (list 

    日期 2023-06-12 10:48:40     
  • sicp 2.4节小题尝试解答

    sicp 2.4节小题尝试解答

    这一节那是相当的有趣,抽象数据的多重表示:采用标志(tag)来区分和数据导向(data-directed)技术,稍微提了下消息传递。通过一张二维表格将类型、操作的分派机制介绍的很清楚,静态OO语言正是通过类型来决定消息的分派,而消息传递以列进行划分,每个类型都以过程来表征,也就是所谓的“智能数据对象”,两者各有优缺点。当类型增加频繁时,消息传递风格的分派更容易扩展,当操作增加频繁时,反而是显式的

    日期 2023-06-12 10:48:40     
  • sicp 3.1.1小节习题尝试解答

    sicp 3.1.1小节习题尝试解答

    这一节主要是介绍局部状态变量,介绍了set!和begin的语法,看来ruby使用!号来表示改变变量值不是什么新鲜主意。    习题3.1,不解释了 ;习题3.1 (define (make-accumulator init)   (define (accumulator num)     (set! init (+ init num))     init)   accumulat

    日期 2023-06-12 10:48:40     
  • sicp 3.9题解答

    sicp 3.9题解答

      引入了赋值之后,代换模型失效,3.2小节引入了环境模型。3.9题用于考察对环境模型的理解。递归版本的(factorial 6)的环境结构如下图:        blogjava不允许太长的图片,省略了n=3,2,1的三个frame,这些frame的关联环境都是全局环境。     再看看迭代版本的(factorial 6)的环境结构,同样省去了部分迭代过程,当counter=7的时候迭代停

    日期 2023-06-12 10:48:40     
  • sicp 3.12 3.13 3.14习题解答

    sicp 3.12 3.13 3.14习题解答

    习题3.12,append不是改变函数,不会改变x的结构。append!是改变函数,显然第一个response是(b),第二个就是(b c d)。图就不画了,画了一次太麻烦了。 习题3.13,利用set-cdr!形成环,比较有意思: (define z (make-cycle (list a b c d))) z在DrScheme上表示为: #0=(a b c d . #0#) 形象地展

    日期 2023-06-12 10:48:40     
  • sicp3.5.2、3.5.3节部分习题尝试解答

    sicp3.5.2、3.5.3节部分习题尝试解答

      (stream-map * s1 s2)) (define factorials (cons-stream 1 (mul-streams factorials (stream-cdr integers)))) 3.55解答,比较有趣,也是不难的题目,列出来找出规律就成了,就是将(stream-car s)加到生成的序列中的每个元素上,通过stream-map,最后的结果就是每个元素都是前n

    日期 2023-06-12 10:48:40     
  • sicp4.1.1-4.1.5节部分习题尝试解答(update)

    sicp4.1.1-4.1.5节部分习题尝试解答(update)

        当将用scheme写的scheme求值器跑起来的时候,你不觉的兴奋是不可能的,真的太酷了,太magic了。 习题4.2,如果将application?判断放在define?判断之前,那么求值(define x 3)将把define当作一般的procedure应用于参数x和3,可是define是特殊的语法形式,而非一般过程,导致出错。 习题4.4,我的解答,eval增加两个判断:  

    日期 2023-06-12 10:48:40     
  • sicp 3.9题解答

    sicp 3.9题解答

       引入了赋值之后,代换模型失效,3.2小节引入了环境模型。3.9题用于考察对环境模型的理解。递归版本的(factorial 6)的环境结构如下图:        blogjava不允许太长的图片,省略了n=3,2,1的三个frame,这些frame的关联环境都是全局环境。     再看看迭代版本的(factorial 6)的环境结构,同样省去了部分迭代过程,当counter=7的时候迭

    日期 2023-06-12 10:48:40     
  • sicp 3.12 3.13 3.14习题解答

    sicp 3.12 3.13 3.14习题解答

    习题3.12,append不是改变函数,不会改变x的结构。append!是改变函数,显然第一个response是(b),第二个就是(b c d)。图就不画了,画了一次太麻烦了。 习题3.13,利用set-cdr!形成环,比较有意思: (define z (make-cycle (list a b c d))) z在DrScheme上表示为: #0=(a b c d . #0#) 形象地

    日期 2023-06-12 10:48:40     
  • sicp 5.1节习题尝试解答

    sicp 5.1节习题尝试解答

    5.1 图就不画在机器上了,麻烦5.2 用寄存器语言描述5.1题中的阶乘机器,加上了读取和打印,这里的解答全部在实际的寄存机器中验证过,但是仍然按照该节的表示法表示。 (controller   fac-loop    (assign n (op read))    (assign product (const 1))    (assign counter (const 1))   i

    日期 2023-06-12 10:48:40