• SICP学习笔记(P3P17)


            SICP丢在一旁一年有余, 越来越觉得里边的内容值得读读, 是时候行动了.就从本篇开始吧, 加油, 坚持.

            练习题答案: http://eli.thegreenplace.net/category/programming/lisp/sicp/

            IDE(DrRacket)下载地址: http://racket-lang.org/

    程序设计的基本元素

    基本表达式     用于表示最简单的个体

    组合的方法     通过他们可以从简单构造出复合的元素

    抽象的方法     对复合对象重命名, 并将它们当做单元去操作

    定义过程的一般形式

            定义过程的一般形式:  (define (<name> <formal paremeters>) <body>)

            例: 定义一个求平方的过程.

    (define (square x) (* x x))

            可以利用square这个过程作为基本结构再去构成其他过程, 比如求一个数的四次方.

    (define (double-square x)
    	(square (square x)))

    条件表达式

            条件表达式的一般形式: (cond (<p1> <e1>) (<p2> <e2>)...(<pn> <en>))

            例: 求一个数的绝对值.

    (define (abs x)
      (cond ((> x 0) x)
            ((= x 0) 0)
            ((< x 0) (- x))))

            另外还可以用if表达式, 它适用于只有两种情况的分析. 求一个数绝对值, 要么小于0返回它的相反数, 要么返回它本身.

    (define (f x)
      (if (< x 0) (- x) x))

    练习1.6

            看上去按照常规思维貌似没什么问题, 我也想了好一会, 最后看答案才知道什么原因. 原来Scheme里的cond表达式把每一个条件分支都会执行一遍. 如果cond每一行加一个类似C#中的"break"应该会解决这个问题.

    练习1.7结合练习1.8

    (define (sqrt-Begin guessValue x)
      (let ((improved-guess (improve guessValue x)))
      (if (close-enough? guessValue improved-guess) improved-guess
          (sqrt-Begin improved-guess x))))
    (define (close-enough? a b)
      (let ((ratio (/ a b)))
        (and (< ratio 1.001) (> ratio 0.999))))
    (define (cube x)
      (* x x x))
    (define (sqrts x)
      (sqrt-Begin 1.0 x))
    (define (improve guessValue x)
      (average (/ x (* guessValue guessValue)) (* 2 guessValue)))
    (define (average a b)
      (/ (+ a b) 3))
  • 相关阅读:
    $NOIP2012$ 题解报告
    $NOIP2011$ 题解报告
    $NOIP2007$ 题解报告
    $NOIP2006$ 题解报告
    $NOIP2005$ 题解报告
    $NOIP2003$ 题解报告
    $NOIP2002$ 题解报告
    $NOIP2001$ 题解报告
    $NOIP2000$ 题解报告
    $NOIP1999$ 题解报告
  • 原文地址:https://www.cnblogs.com/technology/p/1948537.html
Copyright © 2020-2023  润新知