Chapter 1 构造过程抽象

来源:互联网 发布:网站源码基地 编辑:程序博客网 时间:2024/06/06 02:39

    Lisp(List Processing),本书使用的是其方言之一的Scheme。

    Lisp重要优点:计算过程的Lisp描述(称为过程)本身又可以作为Lisp的数据来表示和操作。


1.1 程序设计的基本元素

    基本表达形式

    组合的方法

    抽象的方法

  1.1.1 表达式

    键入表达式,解释器的响应是显示其求值结果。

    组合式,前缀表示,适用于任意个实参,可以直接扩充,允许组合嵌套(将各个运算对象垂直对齐)

     例: (+ (* 3

                        (+ (* 2 4 )

                              (+ 3 5 )))

                   (+ (- 10 7 )

                           6 ))

       结果:57。


  1.1.2 命名与环境

     变量:名字标识符   变量的值:变量所对应的对象    环境:解释器对名字--值对偶的储存

    define命名

    例:

    (define pi 3.14159)

    (define radius 10)

    (define circumference (* 2 pi radius))

     circumference 

     62.8318

    鼓励采用递增的方式去开发和调试程序。


  1.1.3 组合式的求值

    求值过程是递归的,递归是一种处理层次性结构(树这样的对象)的强有力的技术。

    环境就是用于确定表达式各个符号的意义,为求值过程提供一种上下文。

  1.1.4 复合过程

    过程定义:

    (define  (<name> <formal parameters>)  <body>)

    例:

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

    (square  3 )

      9


    (define (sum-of-squares x y) (+ (square x) (square y)))

    (sum-of-squares 3 4)

     25

    复合过程的使用方式与基本过程完全一样。


  1.1.5 过程应用的代换模型

    代换模型:将过程体中的每个形参用相应的实参取代之后,对这一过程体求值。  实际中,一般采用提供形式参数的局部环境的方式,产生“代换”效果;简单的模型,面对“变化的数据”时将不实用。

    正则序:完全展开而后归约的求值模型

    应用序:先求值参数而后应用。(可避免对表达式的重复求值)


  1.1.6 条件表达式和谓词

    谓词:返回真或假的过程,也指能求出真或假的值的表达式。

    (cond  (<p1> <e1>)

                   (<p2> <e2>)

                          .......

                   (<pn> <en>)) 

      例:( define (abs x)

                  (cond ((> x 0) x)

                               (= x 0) 0)

                               (< x 0) (-x))))


               ( define (abs x)

                   (cond ((< x 0) (-x))

                              (else x)))


    if表达式:(if <predicate> <consequent> <alternative>)

        例: (define (abs x)

                         (if (< x 0)

                              (-x)

                               x))


    逻辑复合运算符:(and <e1> <e2>...<en>)

                                    (or <e1> <e2>...<en>)

                                    (not <e>)

       例:(define ( >= x y)                       //定义>=运算符

                       (or (> x y) (= x y)))


                (define (>= x y)

                      (not (< x y)))

          

                          

               


  

    


    

0 0
原创粉丝点击