《计算机程序的构造和解释(SICP)》学习笔记

2016-11-26  本文已影响0人  chen_lei

计算机科学不是一门如何使用计算机的学科,它也不是科学,就好像几何学不是教你怎么使用工具进行测量的学科。
作为一门工程学科,它有很多和其他工程学科一样的一些要点:

Mit-Scheme的安装和使用

在使用Mit-Schme的时候,我对里面的7 error>感到奇怪,error前面的数字是什么呢?原来表示Scheme出错循环的层数。

第一章 构造过程抽象

程序设计的基本元素

(define (sqrt-iter guess x)
   (if (good-enough? guess x)
       guess
       (sqrt-iter (improve guess x) 
                   x
       )
    )
 )

 (define (improve guess x) 
         (average guess (/ x guess)
         )
 )

(define (average x y)
        (/ (+ x y)
           2 
        )
 )

 (define (good-enough? guess x)
          (< (abs (- (square guess) x)) 
              0.001)
 )

 (define (sqrt x)
  (sqrt-iter 1 x)
  )
(define (fib n)
    (cond ((= n 0) 0)
                ((= n 1) 1)
                (else (+ (fib (- n 1)) 
                         (fib (- n 2)))
                )
    )
 )

接下来可以写程序了,用(count-changes 100)即可求出结果

  (define (count-changes amount)
          (cc amount 5)
  )

  (define (cc amount kinds-of-coins)
          (cond ( (or (< amount 0)
                            (= kinds-of-coins 0)
                    )
                    0
                  )
                  ( (= amount 0)
                      1
                  )
                  (else (+ (cc amount (- kinds-of-coins 1))
                           (cc (- amount (amount-of-coins kinds-of-coins)) kinds-of-coins)
                              )
                  )
      )
  )

  (define (amount-of-coins count)
          (cond ((= count 1) 1)
                  ((= count 2) 5)
                  ((= count 3) 10)
                  ((= count 4) 25)
                  ((= count 5) 50)
      )
  )
(define (exp x n)
        (if (= 0 n)
            1
            (* x (exp x (- n 1)))
        )
)
(define (exp-iter b counter product)
        (if (= 0 counter)
            product
            (exp-iter b (- counter 1) (* b product))
        )
)
(define (exp x n)
  (exp-iter x n 1)
)
(define (fast-exp x n)
      (cond ((= 0 n) 1)
            ((even? n) 
             (* (fast-exp x (/ n 2)) 
                (fast-exp x (/ n 2))
             )
            )
            (else  (* x (fast-exp x (- n 1)))
            )
            
      )
)
上一篇 下一篇

猜你喜欢

热点阅读