自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

红孩儿编程大师

这里为您成为编程大师提供捷径

  • 博客(40)
  • 收藏
  • 关注

翻译 5.5.7 把编译后的代码接入解释器

5.5.7 把编译后的代码接入解释器我们还没有解释如何载入编译过的代码到解释器机器中和如何运行它。我们将假定显式控制的解释器机器已经被定义正如在5.4.4部分中的那样,它带有的附加的操作,在脚本注示38中指定了。我们将实现一个程序compile-and-go它编译一个scheme表达式,载入结果性的目标代码到解释器机器中,并且让机器在解释器的全局环境中运行这些代码,打印结果,并且进入解释器...

2018-10-31 19:53:49 175

翻译 5.5.6 词法的寻址

5.5.6 词法的寻址编译器执行的最普通的优化之一是变量查找的优化。 我们的编译器,如我们到目前为止已经实现它了,生成代码使用解释器机器的lookup-variable-value操作。这通过把它和在运行时环境中的工作帧的当前被绑定的每个变量进行比较, 搜索变量。如果有许多的变量或者是帧有很深的嵌套,这样的搜索是代价很大的。例如,考虑在一个程序应用中的解释的表达式(*  x  y  z)时...

2018-10-31 19:52:05 113

翻译 4.4.4 实现查询系统

4.4.4 实现查询系统4.4.2部分描述了查询系统如何工作。现在我们通过表示出系统的一个完整的实现,来填充它的细节。4.4.4.1 驱动循环与实例化查询系统的驱动循环重复地读取输入的表达式。如果表达式是一个规则或者是断言,就被添加到数据库中,然后信息就加上了。否则,表达式被作为一个查询来对待。驱动把这个查询传给解释器qeval,再结合初始化的帧的流,这个流包括了一个单独的空的帧。解...

2018-10-31 19:50:00 412

翻译 5.5.5 编译后的代码的例子

5.5.5 编译后的代码的例子现在我们已经看到了编译器的所有的元素,让我们检查一个编译过的代码的例子,来看一看如何把它组合在一起的。通过调用compile,我们将编译一个递归性的阶乘程序的定义:(compile '(define (factorial n)    (if (= n 1)        1        (* (factorial (- n 1)) n))) 'v...

2018-10-31 12:50:28 489

翻译 5.5.4 组合指令序列

5.5.4 组合指令序列这部分描述了指令序列如何被表示和组合的细节。回忆一下5.5.1部分中的一个指令序列被表示成需要的寄存器的列表,修改过的寄存器的列表,和实际的指令。我们也考虑一个标签成为一个指令序列的退化性的例子,它不需要修改任何的寄存器。所以通过我们使用选择子的指令序列来确定需要的和修改的寄存器:(define (registers-needed s)  (if (symbo...

2018-10-31 12:47:44 1050

翻译 5.5.3 编译组合子

5.5.3 编译组合子编译过程的本质是程序应用的编译。一个被编译的组合子带有一个给定的目标和一个连接符的代码有如下的形式:<compilation of operator, target proc, linkage next><evaluate operands and construct argument list in argl><compilatio...

2018-10-30 22:13:47 175

翻译 5.5.2 编译表达式

5.5.2 编译表达式在这部分中和下一个部分中,我们实现了编译程序分发的代码生成器。* 编译连接代码总之,每个代码生成器的输出将以指令结尾,被程序compile-linkage所生成的是实现了要求的连接。如果连接是return,那么我们必须生成指令(goto (reg continue)).这需要continue寄存器和不修改任何寄存器。如果连接是next,那么我们不需要添加额外的指...

2018-10-30 13:08:44 443 1

翻译 5.5.1 编译器的结构

5.5.1 编译器的结构在4.1.7部分中,为了把分析与执行分开,我们已经修改了我们的原来的元循环的解释器。我们分析每个表达式来生成一个执行程序,它带有一个环境为实际参数并且执行要求的操作。在我们的编译器中,我们将做必要的相同的分析。代替生成执行程序的是,然而,我们将生成被我们的寄存器机器运行的指令的序列。程序compile是在编译器中的最顶层的分发程序。它对应着4.1.1部分中的ev...

2018-10-30 12:33:25 249

翻译 5.5 编译

5.5 编译5.4部分中的显式控制的解释器是一个寄存器机器,它的控制器解释scheme程序。在这部分中,我们将看看在一个寄存器机器上如何运行一个scheme程序,并且这个机器上的控制器不是一个scheme的解释器。显式控制的解释器的机器是通用的,它能执行任何的计算过程,只要这个过程能够被描述成scheme程序。解释器的控制器精心策划它的数据路径的使用来执行目标的计算。因此,解释器的数据...

2018-10-30 12:30:00 133

翻译 5.4.4 运行解释器

5.4.4 运行解释器对显式控制的解释器的实现,我们已经来到了开发的末尾了,在第一章开始时,我们已经连续探索了解释过程的更加精确的模型。我们开始于相对地非正式的替换模型,然后在第三章中扩展了它,成为了环境模型,它让我们有能力处理状态和改变。在第四章的元循环的解释器中,在表达式的解释期间,为了做更显式的环境结构的组装,我们使用了scheme本身作为一个语言。现在,用寄存器机器,我们能更贴...

2018-10-29 13:20:49 184

翻译 5.4.3 条件,赋值,定义

5.4.3 条件,赋值,定义作为元循环的解释器,通过选择表达式的解释的片段来处理特殊的形式。对于一个条件的表达式,我们必须解释判断式和决定,基于判断式的值,解释真值的语句或者是假值时的语句。在解释判断式之前,我们保存条件表达式本身,为了我们能在稍后的时候,抽取到真值时的语句或者是假值时的语句,并且我们保存了continue,它是我们在稍后需要用到的,为了返回到表达式的解释,这个表达式...

2018-10-29 13:19:40 138

翻译 5.4.2 序列化解释与尾递归

5.4.2 序列化解释与尾递归显式控制的解释器在ev-sequence的部分与元循环的解释器的eval-sequence程序是很相似的。它处理在程序体中的表达式的序列或者是显式的begin表达式。通过把要解释的表达式的序列放入unev,在栈上保存continue,跳转到ev-sequence,就解释了显式的begin表达式。ev-begin  (assign unev (op be...

2018-10-29 13:18:15 111

翻译 5.4.1 显式控制的解释器的核心

 5.4.1 显式控制的解释器的核心在解释器中核心元素是指令集的序列,指令集开始于eval-dispatch.这对应于4.1.1部分中描述的元循环解释器的程序eval.当控制器开始于eval-dispatch,它解释环境中的表达式。当解释完成时,控制器将来到存储在寄存器中的入口点。寄存器中保存着表达式的值。正如元循环的eval,eval-dispatch的结构也是一个案例分析,根据要被解...

2018-10-28 13:02:55 124

翻译 5.3.2 维护无限内存的假象

5.3.2  维护无限内存的假象在5.3.1部分中列出的表示方法解决了实现列表结构的问题,提供了我们有无限多的内存。在一个真实的机器中,我们将在组装新的数对的时候,最终耗尽了空闲的空间。然而,在一个典型的计算中,生成的数对的大部分仅被用来保存中间的计算结果。这些结果被读取后,数对就不再被需要了,它们是垃圾了。例如,如下的计算:(accumulate  +  0  (filter  od...

2018-10-28 10:26:23 107

翻译 5.4显式控制的解释器

5.4显式控制的解释器在5.1部分中,我们已经看到如何把简单的SCHEME程序转换成寄存器机器的描述。我们将在更复杂的程序中执行这种转换,4.1.1~4.1.4部分的元循环解释器展示出用程序eval和apply如何描述出SCHEME解释器的行为。我们在这部分中开发的显式控制的解释器展示出用寄存器和栈上的操作来描述在解释执行的过程中,程序调用和实际参数传递的机制是如何被使用的。此外,显示控...

2018-10-27 16:55:50 138

翻译 5.3.1 作为向量的内存

5.3.1 作为向量的内存传统的计算机内存被视为有许多小房间的数组,它的任何一间都能包含着一片信息。任何一间都有独特的名称,叫做它的地址或者是位置。经典的内存系统提供了两个原生的操作:一个是从特定的位置取得存储的数据,一个是向特定的位置赋新值。在一定的区域内,内存地址能够自动增长来支持按顺序读取数据。更一般地说,许多重要的数据操作要求内存地址也被看作是数据,地址也能被存入内存,在机器的寄...

2018-10-26 21:54:02 294

翻译 5.3 内存分配与垃圾回收

5.3 内存分配与垃圾回收   在5.4部分中,我们将展示如何用一个寄存器机器实现一个SCHEME解释器。为了简化讨论,我们假定我们的寄存器机器有一个列表结构的内存,而且操作列表结构的基本操作是原生的。当我们聚焦于在一个SCHEME解释器中的控制机制时,假定如此的内存的存在是一个有用的抽象。但这并不影响到一个实际计算机的实际的原生的数据操作的现实的视角。为了获得一个更完整的LISP系统如...

2018-10-26 12:14:16 145

翻译 5.2.4 监控机器的性能

5.2.4 监控机器的性能模拟是有用的,不仅对于一个假定的机器的设计的正确性进行验证,而且对于度量机器的性能。例如,在我们的模拟程序中,我们能够安装一个测量器,它能度量一个计算中的栈操作所使用的次数。为了做到这一点,我们修改了我们的模拟的栈,来跟踪被保存在栈上的次数寄存器的值,和栈达到的最大深度,并且加一个消息到栈的接口,来打印出栈的统计信息,如下所示。我们也加一个操作到基本的机器模型...

2018-10-26 12:11:41 183

翻译 5.2.3 为了指令生成可执行程序

5.2.3 为了指令生成可执行程序汇编器调用make-execution-procedure 来生成指令的执行程序。像4.1.7部分中的解释器中的  analyze程序一样,这个分发程序根据指令的类型来生成合适的执行程序。(define  (make-execution-procedure  inst  labels  machine                          ...

2018-10-25 22:09:57 225

翻译 5.1.5 指令总结

5.1.5 指令总结在我们的寄存器机器语言中的一个控制器指令有如下的形式之一,任何一个输入是(reg  <register-name>) 或者(const  <constant-value>)这些指令在5.1.1部分中介绍了:(assign   <register-name>   (reg  <register-name>))(ass...

2018-10-23 12:18:11 156

翻译 5.1.4 使用一个栈来实现递归

5.1.4 使用一个栈来实现递归正如这个思想所展示的那样,我们能实现任何的迭代的过程,通过指定一个寄存器机器,让它有一个寄存器来对应于过程的每个状态变量。机器则重复地执行一个控制器的循环,改变寄存器的内容,直到一些中止的条件被满足。在控制器序列的任何一个点上,机器的状态(表示迭代过程的状态)是完全取决于寄存器的内容(状态变量的值)。实现递归过程,然而,需要一种额外的机制。考虑如下的计算...

2018-10-23 12:17:08 4252

翻译 5.2.2 汇编器

5.2.2 汇编器汇编器为了一个机器,把控制器表达式的序列转换成了相应的机器指令的列表,任何一个指令都有它的执行程序。进而,汇编器更像是在第四章中我们学习的解释器这有一个输入的语言(在这个例子中,是寄存器机器的语言)我们为了语言中的任何一种表达式,必须执行一个合适的动作。为了任何一个指令生成一个执行程序的技术正如我们在4.1.7部分中使用的,为了加速解释器的执行,我们通过把分析与运行...

2018-10-19 20:14:09 138

翻译 5.2.1 机器的模型

5.2.1 机器的模型由make-machine生成的机器模型被表示成一个使用在第三章中开发的消息传递技术的具有本地状态的程序。为了构建这个模型,make-machine开始于调用 make-new-machine 程序来组装对于所有的寄存器机器共用的机器模型的各个部分。这个基本的被make-machine组装的机器模型是一个有一些寄存器和一个栈,加上一个逐条执行控制器指令的执行机制的容...

2018-10-19 12:09:56 99

翻译 5.2 一个寄存器机器的模拟器

5.2  一个寄存器机器的模拟器为了很好的理解寄存器机器,我们必须测试 我们设计的机器能否按预期执行程序。 测试一个设计的一个方法是手工模拟控制器的操作,如在5.5中的练习题。如果不是针对于最简单的机器,这就是极其麻烦的。 在这部分中,我们用寄存器机器语言为机器构造了一个模拟器。 这个模拟器是一个有四个接口程序的SCHEME模式程序。第一个程序 使用了寄存器机器的描述 构造了一个机器模...

2018-10-18 22:28:36 653

翻译 5.1.3 子程序

5.1.3 子程序当设计一个执行运算的机器时,我们优先设计能被运算的不同的部分共享的组件,而不是单独的组件。考虑这种情况:一个机器有两个求最大公约数的运算,一个是找到寄存器A,B的内容的最大公约数,另一个是找到寄存器C,D的内容的最大公约数。开始时我们可能设计出一个原生的求最大公约数的操作,然后扩展为用最原生的操作来生成 求最大公约数的两个实例。在图5.7中,仅仅显示出了机器的数据路径的...

2018-10-16 20:42:29 112

翻译 5.1.2 在机器设计中的抽象

5.1.2 在机器设计中的抽象我们将经常定义一个机器包含着原生的操作,这个原生的操作实际上可能是非常复杂的。例如在5.4和5.5部分中,我们把SCHEME的环境操作当成上原生的操作。这种抽象是非常有价值的。因为它允许我们忽略机器的部分的细节,为了能够集中精力于设计的其它方面。事实是我们能够隐藏起很多的复杂度,然而这并不意味着机器的设计是非现实的。我们总是能够用更简单的原生操作来实现这个复...

2018-10-14 11:00:54 97

翻译 5.1.1 描述寄存器机器的语言

 5.1.1 描述寄存器机器的语言数据路径图和控制器图对于表示像求最大公约数这样的简单机器是足够的了。但是用它们来描述如LISP解释器这样的大型机器就是不明智的了。为了能够实现复杂的机器,我们创建一个语言以文本的格式,来表示被数据路径与控制器提供的信息。我们将开始一种标记法来直接对数据路径图与控制器图进行表示。通过描述寄存器和操作我们定义一个机器的数据路径。为了描述寄存器,我们能给它一...

2018-10-13 18:02:52 247

翻译 4.4.3 逻辑编程是数学的逻辑吗

4.4.3 逻辑编程是数学的逻辑吗在查询语言中被使用的组合的方法首先可能与数学逻辑的与或非操作相同,查询语言的规则的应用在事实上是由推理的方法来完成的。查询语言与数学逻辑的标识性并不是真正的有效的,因为查询语言提供了一个控制结构来程序化的解释逻辑语句。我们能够常常利用这种控制结构。例如,为了找到所有的程序员的监督者,我们能写一个查询,以如下的两种等价的形式:(and  (job  ?x...

2018-10-11 13:53:57 402

翻译 4.4.2 查询系统如何工作

4.4.2 查询系统如何工作在4.4.4部分中我们将把查询解释器的实现程序表示为一系列的程序的组合而成的集合。在这一部分中,我们给出一个概述,来解释系统的通用的结构,它是独立于低层的实现细节的。在描述了解释器的实现之后,我们将处于一个位置,也就是理解了查询语言的逻辑操作与数学的逻辑操作的不同之处,其中的一些局限之处,一些很微妙的方式。为了把查询与数据库中的事实与规则进行匹配,查询的解释...

2018-10-10 11:21:45 166

翻译 5.1 设计寄存器机器

5.1 设计寄存器机器为了设计一个寄存器机器,我们必须设计它的数据路径(寄存器和操作)和序列化这些操作的控制器。为了演示一个简单的寄存器机器的设计,让我们看一看欧拉的算法,就是用于计算两个整数的最大公约数的。正如我们在1.2.5部分看到的那样,欧拉算法能被用一个迭代的流程执行。如下面的程序:(define (gcd a b)   (if (= b 0)     a    (gc...

2018-10-09 16:39:07 266

翻译 第5章 用寄存器机器计算

第5章 用寄存器机器计算我的目标是展示出 heavenly天使 机器 不是 divine, live being生灵 的一种,而是 clockwork 钟表匠(他认为时钟具有制作者赋与其的对工作的荣耀感的灵性)的一种, 在一种最简单的和材料的力量的范围内  引起了几乎所有的 多种多样的[manifold] 运动[motion],正如一种单独的 重力[weight] 引起了钟的所有的运动[...

2018-10-09 16:26:40 386

翻译 4.4.1 演绎信息的检索

4.4.1 演绎信息的检索为了信息检索,在提供的针对数据库的接口中,逻辑编程的最好。在这章中,我们实现的查询语言,被设计成使用这种方式。为了演示查询系统做什么,我们将显示在管理微软的个人记录的数据库中,查询系统是如何被使用的。微软是在波士顿地区的高技术企业。语言提供了面向模式的读取个人信息。也能利用做逻辑演绎的通用规则。* 一个样品数据库关于微软的个人数据库包括了关于企业个人...

2018-10-09 11:52:31 166

翻译 4.4逻辑编程

4.4逻辑编程在第一章中, 我们了解了计算机科学是处理过程式的知识,而数学是处理声明式的知识。的确,编程语言要求程序员表达知识时,以一种特定的形式。这种形式显示出解决特定问题的一步步的方法。另一方面,高层次的语言提供了,作为语言实现的一部分,大量的方法论的知识。这些知识把用户从具体执行的大量的细节中解放出来。大部分的编程语言,包括lisp,被组织成计算数学函数的值。面向表达式的语言(...

2018-10-07 13:12:03 284

翻译 4.3.3 实现一个AMB的解释器

4.3.3 实现一个AMB的解释器一个普通的scheme表达式解释可能返回一个值,可能没有终止,或者可能报告一个错误。在非确定性scheme,一个表达式的解释,可以额外地导致一个死胡同的发现,在这种情况下的解释,必须回溯到之前的选择点。非确定性scheme的解释,在这种特殊的情况下,是复杂的。为了非确定性scheme,通过修改4.1.7部分中的分析解释器,我们将组装amb的解释器。...

2018-10-07 13:09:43 232

翻译 4.2.3 流作为推迟列表

4.2.3 流作为推迟列表在3.5.1部分中,我们显示了如何实现流为一个延迟的列表.我们介绍了标识符delay和cons-stream,它们允许我们组装一个对计算一个流的其它部分的承诺,直到稍后来执行这个承诺.我们能使用介绍的标识符的通用技术来满足我们在解释过程中的更多的控制,但这是困难的.第一件事,一个标识符不是像程序一样是第一等公民,所以我们不能把它与高阶程序结合在一起.此外,我们必...

2018-10-06 12:15:33 154

翻译 4.3.2 非确定化的程序的例子

4.3.2 非确定化的程序的例子4.3.3部分描述了AMB的解释器的实现。首先,然而,我们给出一些它如何能被使用的例子。非确定性编程的优势是我们能表达搜索如何执行的细节,在高层次的抽象上,表达我们的程序。*逻辑谜题如下的谜题(从迪斯曼1968)是简单的逻辑谜题的一大类的经典:甲,乙,丙,丁,辛五个人住在仅包括五层楼的公寓中,他们住在不同的楼层。甲不住顶层,乙不住底层,丙不住在顶...

2018-10-06 09:01:13 244

翻译 4.3.1 AMB与搜索

4.3.1 AMB与搜索为了扩展scheme来支持非确定性,我们介绍一个新的标识符,叫做amb.表达式(amb <e1>  <e2> <e3> <e4> ....<en>) 随机地返回n个表达式中的一个<ei>。例如,表达式(list (amb  1 2 3)  (amb 'a 'b))能有六个可能的值:(1...

2018-10-06 08:58:37 295

翻译 4.3在SCHEME的演变--未确定的计算

4.3在SCHEME的演变--未确定的计算在这部分中,我们扩展scheme的评估器,支持一种编程范式,叫做非确定性计算。通过构建到评估器中一个工具以支持自动化搜索。这是一个对语言的更深层的改变。比4.2部分中延迟评估的介绍的改变更大。非确定性计算,像流处理一样,对于生成和测试应用程序来说是很用的。考虑一下开始于两个正整数的列表的任务,找到一个整数的数对,一个元素来自于第一个列表,一...

2018-10-06 08:57:06 246

翻译 4.2.2 具有推迟解释的解释器

4.2.2 具有推迟解释的解释器在这部分中,我们实现一个正常序的语言,这和scheme相同,除了复合程序在任何一个参数方面是不严格的。原生的程序是严格的。4.1.1部分的解释器是不难被修改的。语言它解释这种方式。几乎所有的修改的中心都围绕着程序应用。基本的思想是,当应用一个程序时,解释器必须确定哪个参数能被评估,哪个能被推迟。推迟的参数是不被评估的。相反,它们能被转成为对象,叫做待估计...

2018-10-06 08:52:50 105

翻译 4.1.7 从执行中分离出语法分析

4.1.7 从执行中分离出语法分析通过优化,让系统分析仅执行一次,我们能把解释器转化成更有效率的。我们分拆了eval,它有一个表达式和一个环境,成为两个部分。程序analyze仅有一个参数是表达式。它执行系统分析和返回一个新的程序,是执行程序,它在执行分析的表达式中封装了要被做的工作.这个程序执行以一个环境作为它的参数,完成解析.在一个表达式上分析仅执行了一次,这节省了工作,而执行程序...

2018-10-06 08:49:57 140

matlab安装教程在windows操作系统下

matlab安装图解详细教程 ,操作系统为windows10 MATLAB 版本2020 22.1.0 软件分类:编程工具大小:4.47 GB时间:2023-08-31 软件介绍:MATLAB是mathworks官网发布的一款功能强大、性能稳定的商业数学软件

2024-04-09

数据分析领域-Python编程语言-NumPy数据处理-参考资料

这是专门适用于大学生的编程语言的代码库的使用说明,用于线性代数的 学习与理解,大学生计算机竞赛,Python的学习与使用,数据处理等

2024-03-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除