存档

  • sicp 笔记 (13)

    第五章习题解答,跳过了大部分题目。

    E-5.1: 流程图略。

                                                 ---
                                                /   \       +---+
                                     +--------> | > | <---- | n |
                                     |          \   /       +---+
                                     |           ---
                                     |
            +---------+         +---------+
       +--->| product |         | counter |<--------------------+
       |    +---------+         +---------+                     |
       |        |                 |     |                       |
       |        

    阅读全文…

    2014年12月31日 | 归档: 计算机程序的构造和解释 | 标签:
  • sicp 笔记 (12)

    第四章习题 4.38 – 4.79 的解答。由于 amb 环境没实现,程序没跑起来,跳过了 4.3 小节的部分题目。

    E-4.38: 去掉题目的条件后有5种可能性,分别是:

    baker = 1, cooper = 2, fletcher = 4, miller = 3, smith = 5
    baker = 1, cooper = 2, fletcher = 4, miller = 5, smith = …

    阅读全文…

    2014年9月27日 | 归档: 计算机程序的构造和解释 | 标签:
  • sicp 笔记 (11)

    第四章习题 4.16 – 4.37 的解答。

    E-4.16:

    (a) 如果匹配到相应的变量再检查一下变量值是否为“unassigned”。

    (define (lookup-variable-value var env)
      (define (env-loop env)
        (define (scan vars vals)
          (cond ((null? vars)
                 (env-loop (enclosing-environment env)))
                ((eq? var (car vars))
                 (let ((v (car vals)))
                   (if (eq? v '*unassigned*)
                     (error 

    阅读全文…

    2014年6月29日 | 归档: 计算机程序的构造和解释 | 标签:
  • sicp 笔记 (10)

    第四章习题 4.1 – 4.15 的解答。从本章开始使用 mit-scheme 9.1.1。

    E-4.1: 题目的意思是,函数 list-of-values 对参数列表的求值顺序依赖于解析器的实现。如果解析器对参数列表的求值顺序是从右往左的,那么 list-of-values 的求值顺序也是从右往左的,也就是说,对于 list-of-values 中的“(cons …)”,会先算“(list-of-values (rest-operands …))”这部分,后算“(eval (first-operand …))”,也就是从右往左了;如果解析器的求值顺序是从左往右,那么 list-of-values 的求值顺序也是从左往右。

    (define (list-of-values-lr exps env) ; evaluates from left to right
      (if (no-operands? exps)
        '()
        (let ((first-value (eval (first-operand 

    阅读全文…

    2014年4月19日 | 归档: 计算机程序的构造和解释 | 标签:
  • sicp 笔记 (9)

    第三章习题 3.73 – 3.82 的解答。

    E-3.73:

    (load "../examples/3.5.2-infinite-streams.scm")
    
    (define (integral integrand initial-value dt)
      (define int
        (cons-stream initial-value
                     (add-streams (scale-stream integrand dt)
                                  int)))
      int)
    
    (define (RC resistance capacitance time-step)
      (lambda (currents initial-voltage)
        (cons-stream initial-voltage
                     (add-streams (scale-stream currents resistance)
                                  (integral (scale-stream currents 

    阅读全文…

    2014年3月8日 | 归档: 计算机程序的构造和解释 | 标签:
  • sicp 笔记 (8)

    第三章习题 3.38 – 3.72 的解答。

    E-3.38:

    (a) 每个人的操作都作为一个原子操作的话,有 A(3, 3) 共 6 种可能:

    Peter Paul Mary: 90 70 35
    Peter Mary Paul: 90 45 25
    Paul Peter Mary: 80 70 35
    Paul Mary Peter: 80 40 20
    Mary Peter Paul: …

    阅读全文…

    2014年1月5日 | 归档: 计算机程序的构造和解释 | 标签:
  • sicp 笔记 (7)

    第三章习题 3.21 – 3.37 的解答。

    E-3.21: 因为 queue 只记录队头指针和队尾指针,而打印 front-ptr 的时候把整个队列都打印出来了,打印 rear-ptr 只打印最后一个元素。最后有一组“(# #)”应该是 map 的返回值。

    (load "../examples/3.3.2-representing-queues.scm")
    
    (define (print-queue q)
      (define (iter current end)
        (if (eq? current end)
          (map display (list (car current) "\n"))
          (begin (map display (list 

    阅读全文…

    2013年10月28日 | 归档: 计算机程序的构造和解释 | 标签:
  • sicp 笔记 (6)

    第三章习题 3.1 – 3.20 的解答。

    E-3.1:

    (define (make-accumulator value)
      (define sum value)
    
      (lambda (x)
        (set! sum (+ sum x))
        sum))
    
    ; ---------------------------------------------
    
    (define A (make-accumulator 5))
    
    (A 10)
    </pre>
    
    E-3.2:
    
    <pre lang='scheme' line='1' src='3.2.scm'>
    (define (make-momitored f)
      (define sum 0)
    
      

    阅读全文…

    2013年8月6日 | 归档: 计算机程序的构造和解释 | 标签:
  • sicp 笔记 (5)

    第二章习题 2.73 – 2.97 的解答。

    E-2.73:

    (a) 因为 number 和 variable 使用的是 scheme 提供的原子类型,并不是自定义的类型。

    (b)

    (define (install-deriv-package)
    
      (define (deriv-sum expression var)
        (make-sum ((get 'deriv (operator expression)) (addend expression) var)
                  ((get 'deriv (operator expression)) (augend expression) var)))
    
      (define (deriv-product expression var)
        

    阅读全文…

    2013年6月24日 | 归档: 计算机程序的构造和解释 | 标签:
  • sicp 笔记 (4)

    第二章习题 2.52 – 2.72 的解答。

    E-2.52: 跳过……

    E-2.53: 直接运行一下结果就出来了。

    E-2.54:

    (define (my-equal? a b)
      (if (and (pair? a) (pair? b))
        (and (my-equal? (car a) (car b))
             (my-equal? (cdr a) (cdr b)))
        (eq? a b)))
    
    ; ----------------------------------------------
    
    (my-equal? '(this is a 

    阅读全文…

    2013年4月29日 | 归档: 计算机程序的构造和解释 | 标签:
文章标签 ‘sicp’
  • 当前页 1 / 2
  • 1
  • 2
  • »