在高级编程语言与寄存器机器语言的转换中主要有两种方案,一种是解释器,另一种是编译。 解释器对高级编程语言进行边解析边运行的方式,这有利于代码编写时的交互,也有利于代码问题排查...
在高级编程语言与寄存器机器语言的转换中主要有两种方案,一种是解释器,另一种是编译。 解释器对高级编程语言进行边解析边运行的方式,这有利于代码编写时的交互,也有利于代码问题排查...
将元循环求值器转换为寄存器机器语言,这样的求值器就是 显示控制求值器(explicit-control evaluator)。它能够清楚地向我们展示求值器中的存储管理、参数传...
在 Lisp 中列表结构是一种常用数据结构,它的基础是序对,同时序对也是很多数据对象的基础结构,为了揭示列表结构的数据操作在计算机中的细节,我们需要研究在现代计算机存储器中如...
寄存器机器 我们通过求值器解释了编程语言运算的细节,但由于之前讲解的求值器都是基于 Lisp 语言开发,所以自然继承 Lisp 的控制结构,于是在求值器部分就没有谈到更加底层...
逻辑编程 查询系统通过在数据库中存储断言,并通过查询语句推演查询结果。而操作查询系统的编程语言就是逻辑编程,它能够向数据库中存储断言,使用基础查询,通过 and、or、not...
非确定性计算(Nodeterministic Computing) 能够对不同的可能性进行探索,得出符合条件的其中一种结果,除此之外,非确定性计算还可以对选择点(进行可能性选...
在元循环求值器的基础上,我们能够实现变体形式 惰性求值(lazy evaluation) 器。惰性求值器能够将程式参数包装为延迟计算的表达式,使参数在应用于程式时不会立即计算...
求值器也就是编程语言的解释器,如果求值器是由它要运算的语言缩写就称为 元循环求值器(metacircular evaluator)。 求值器通过 eval 进行表达式语法分析...
流 对现实世界事物建模时,由于事物中存在随时间变化的状态,目前只能通过赋值和可变对象实现。虽然可以解决建模的问题,但由于赋值的引入带来了许多棘手的问题,于是我们亟需一种既能完...
伴随着赋值操作的引入,时间属性也被同时引入了计算对象中。对于非时间性的函数式编程可以通过同时运行几组任务提高整个系统的计算效率,但是对于含有赋值操作的计算对象将涉及共享状态问...
可变列表 除了普通数据对象可以使用赋值操作外,序对也有相应的赋值操作程式,分别是 set-car! 和 set-cdr! ,能够对序对的 car 对应值和 cdr 对应值进行...
环境模型 环境模型与之前介绍过替换模型都属于计算模型,用于描述解释器的运作过程。由于程式中引入了赋值操作,导致替换模型难以正常运作,所以引入新的计算模型,也就是环境模型。 环...
命令式编程 函数式编程中的同一程式接收相同参数,得到的结果将完全一致,这种能够将程式视为数学函数表达的编程风格便是函数式编程。 一旦在函数式编程的基础上引入了赋值操作,编程风...
强制转换 在一个关于不同类型的通用算法系统中除了对同一种类型的数据进行计算外,还可能存在跨类型运算的情况,比如复数与整数的相加等。最简单的解决方法是按如下方式实现一个特殊的跨...
类型标识 数据抽象除了单一类型的情况外,还存在多类型的数据抽象,这种情况下需要对不同类型的数据对象表现形式采取通用程式的手段。通用程式可以根据数据对象的具体表现形式将其应用于...
标识类型 在 Scheme 中数据的基础类型除了数字类型还有标识类型,它可以表示标识符号本身的语法含义,而不是符号产生的计算结果,但是需要注意,数字的标识结果还是数字本身。 ...
闭包特性 cons 构建的序对其实是两个指针,分别指向序对的两个元素,通过 car 和 cdr 获取,cons 构建的序对不仅能包含基础数据,同样也可以包含序对。类似这种能够...
数据抽象是为了将数据对象的结构与数据对象的使用分离,与程式抽象类似。数据对象的结构依靠一组构造器和查询器表示,但单纯的构造器和查询器并不能表达数据对象的实质,它们还必须完全符...
lambda 表达式 lambda 表达式与 define 作用类似,可以将表达式抽象为程式,不过无法命名,结构体如下 lambda 表达式同样可以作为表达式的操作符使用,如...
通过模型对程式的解析,可以得到计算过程,其中一些过程因为结构较通用,所以被整理为典型过程供大家学习。需要注意的是,在计算过程的学习中要分清程式与过程的区别,过程是通过模型对程...