论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP Java Web .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 安卓APP 其他 C# 代写论文
当前位置: > 计算机 > 计算机科学与技术 >

scheme解释程序的实现(论文+程序)

的就是创建这个过程对象时的环境。

5.3.4 环境模型的实现 内容来自www.paper51.com

环境模型需要对外提供一些操作接口如下: paper51.com

1、查找变量的值 http://www.paper51.com

返回此环境中相应变量的约束值,若没有该变量的约束就抛出一个错误。

paper51.com

2、扩展环境

内容来自www.paper51.com

返回一个新环境,这个环境中包含了一个新的空的框架,而其外围环境就是此环境。

http://www.paper51.com

3、定义变量(添加约束) http://www.paper51.com

在环境的第一个框架里加入一个新的约束,它关联起给定的变量和值。如果第一个框架中已经有该变量的约束,则修改它。

copyright paper51.com

4、修改变量

内容来自www.paper51.com

修改变量在环境里的约束,使得该变量约束到给定的值。如果没有这一变量的约束就抛出一个错误。

copyright paper51.com

在实现中,将环境表示为框架的表,框架表示为约束的表,约束表示为变量与值的点对。环境的基本操作有在当前框架中添加一个变量和值的约束;在整个环境中更改一个变量的约束值;在指定框架中查找某个变量的约束;在整个环境中查找某个变量的约束。上面的接口都是基于这几个基本操作来实现的。由于环境是用表来表示的,环境的基本操作都要用基本表操作来实现。 copyright paper51.com

因为所有的表操作都要基于寄存器来进行,所以将环境操作实现为寄存器机器的一部分,具体请参考“虚拟的寄存器机器”的一节。 http://www.paper51.com

5.4 尾递归 copyright paper51.com

Scheme语言的一个重要特性是尾递归,这也是本次设计的一个重点。R5RS[1]标准规定,Scheme实现必须是严格尾递归的,即必须支持尾递归。直观上讲,尾递归使得迭代式的递归调用不需要任何额外的存储空间。下面是用Scheme实现的求幂运算,第一个实现为递归式,如下:

copyright paper51.com

;; 求幂的递归版本

内容来自论文无忧网 www.paper51.com

;; b^n=b*b^(n-1) 内容来自www.paper51.com

;; b^0=1 paper51.com

(define expt 内容来自论文无忧网 www.paper51.com

  (lambda(b n)

内容来自www.paper51.com

   (if (= n 0)

内容来自论文无忧网 www.paper51.com

    1

paper51.com

    (* b (expt b (- n 1))))))

内容来自论文无忧网 www.paper51.com

用该版本对表达式(expt2 5)求值的过程如下: http://www.paper51.com

(expt 2 5) 内容来自论文无忧网 www.paper51.com

(* 2 (expt 2 4))

copyright paper51.com

(* 2 (* 2 (expt 2 3)))

内容来自www.paper51.com

(* 2 (* 2 (* 2 (expt 2 2)))) 内容来自www.paper51.com

(* 2 (* 2 (* 2 (* 2 (expt 2 1)))))

内容来自论文无忧网 www.paper51.com

(* 2 (* 2 (* 2 (* 2 2))))

内容来自论文无忧网 www.paper51.com

(* 2 (* 2 (* 2 4)))

内容来自论文无忧网 www.paper51.com

(* 2 (* 2 8)) copyright paper51.com

(* 2 16) 内容来自论文无忧网 www.paper51.com

32

copyright paper51.com

第二个实现为迭代式,如下:

内容来自www.paper51.com

;; 求幂的迭代版本

paper51.com

(define expt

内容来自www.paper51.com

  (lambda(b n) 内容来自论文无忧网 www.paper51.com

   (define expt-iter copyright paper51.com

      (lambda (b nresult)

paper51.com

        (if(= n 0) http://www.paper51.com

          result http://www.paper51.com

          (expt-iter b

内容来自论文无忧网 www.paper51.com

            (- n 1) paper51.com

            (* b result))))) paper51.com

   (expt-iter b n 1))) 内容来自论文无忧网 www.paper51.com

------分隔线----------------------------
联系方式