草庐IT

javascript - 我想实现一个学习 SICP 的方案解释器

我正在看书StructureandInterpretationofComputerPrograms,我想逐渐编写一个方案解释器。你知道最容易阅读(和简短)的方案的实现吗?我将用C编写JavaScript。 最佳答案 SICP本身有几个部分详细介绍了如何构建元循环解释器,但我建议您阅读以下两本书以获得有关Scheme解释器的更好资源:ProgrammingLanguages:ApplicationandInterpretation和EssentialsofProgrammingLanguages.它们既易于阅读,又能逐步指导您构建解释

windows - 使用 C-x C-f 让 Edwin 正确打开 Scheme 文件

我正在学习SICP。我在我的Windows7(32位)/AMD(64位)机器上使用随MIT-Scheme安装的Edwin3.116。我一直没能发现Edwin无法正确打开和读取文件的原因:当我打开一个现有的.scm文件(其中包含我的代码)时,Edwin只是打开一个包含我的文件名的空白缓冲区。如果我随后保存它,我的代码就会被空白覆盖。很明显,Edwin并没有煞费苦心地写作。除了找不到任何答案,我在以下方面没有成功:C-xC-f后跟完整路径D:\my-schemes\filename.scm(默认目录在C:......)M-xcd后跟d:\my-schemes后跟C-xC-ffilename

学习基于 JavaScript 语言 的计算机界三大神书”之一 ——SICP

如何阅读“计算机界三大神书”之一——SICP《计算机程序的构造和解释》(StructureandInterpretationofComputerPrograms,简记为SICP)是MIT的基础课教材,出版后引起计算机教育界的广泛关注,对推动全世界大学计算机科学技术教育的发展和成熟产生了很大影响。这本书的第1版于1984年出版,第2版于1996年出版,至今已被全世界100多所大学采用为教材,其中包括斯坦福大学、普林斯顿大学、牛津大学等。书号:9787111630548出版时间:2019-07-01机械工业出版社把SICP(第2版)引进中国,于2004年出版,至今已近20年了。令人感兴趣的是,SI

SICP 2.4.3数据定向编程和添加性,方案

有些人可以澄清复杂算术的示例本章。我不明白一点。我将不胜感激任何帮助。问题是以下:有两个包裹具有类似的程序命名。第一个是“(安装矩形包装)”。第二个是“(安装极带)”。此外,定义了一个过程:(定义(from-real-imagxy)(获取'make-from-real-imag'矩形)xy))))我输入方案插条(安装矩形包装)(安装极带)(从im-imag35)它有效。我不明白“进入”内部“从事”如何在适当的软件包中找到合适的功能。当执行字符串“(获取'make-rom-real-imag'矩形)”时,它替换为“(lambda(xy)(tag(tag(make-from-rom-real-im

SICP:惰性求值、流和尾递归(Python实现)

求值器完整实现代码我已经上传到了GitHub仓库:TinySCM,感兴趣的童鞋可以前往查看。这里顺便强烈推荐UCBerkeley的同名课程CS61A。即使在变化中,它也丝毫未变。——赫拉克利特吾犹昔人,非昔人也。——僧肇绪论在上一篇博客《SICP:元循环求值器(Python实现)》中,我们介绍了用Python对来实现一个Scheme求值器。然而,我们跳过了部分特殊形式(specialforms)和基本过程(primitiveprocedures)实现的介绍,如特殊形式中的delay、cons-stream,基本过程中的force、streawn-car、stream-map等。事实上,以上特殊

SICP:复数的直角和极坐标的表示(Python实现)

绪论我们已经介绍过数据抽象,这是一种构造系统的方法学,它能够使程序中的大部分描述与其所操作的数据对象的具体表示无关,比如一个有理数程序的设计与有理数的实现相分离。这里的关键是构筑数据抽象屏障——在有理数的例子中即有理数的构造函数(make_rat)和获取有理数分子分母的选择函数(numer、denom)——它能将有理数的使用方式与其借助于表结构的具体表示形式隔离开。数据抽象屏障是控制复杂性的强有力工具,然而这种类型的数据抽象还不够强大有力。从一个另一个角度看,对于一个数据对象可能存在多种有用的表示方式,且我们希望所设计的系统能够处理多种表示形式。比如,复数就可以表示为两种几乎等价的形式:直角坐

SICP:复数的直角和极坐标的表示(Python实现)

绪论我们已经介绍过数据抽象,这是一种构造系统的方法学,它能够使程序中的大部分描述与其所操作的数据对象的具体表示无关,比如一个有理数程序的设计与有理数的实现相分离。这里的关键是构筑数据抽象屏障——在有理数的例子中即有理数的构造函数(make_rat)和获取有理数分子分母的选择函数(numer、denom)——它能将有理数的使用方式与其借助于表结构的具体表示形式隔离开。数据抽象屏障是控制复杂性的强有力工具,然而这种类型的数据抽象还不够强大有力。从一个另一个角度看,对于一个数据对象可能存在多种有用的表示方式,且我们希望所设计的系统能够处理多种表示形式。比如,复数就可以表示为两种几乎等价的形式:直角坐

SICP:求值和环境模型(Python实现)

绪论我们在第一章引进复合过程时,采用了求值的代换模型定义了将过程应用于实参(arguments)的意义:将一个复合过程应用于一些实参,也就意味着用实参替换过程体里对应的形参(formalparameters)之后,求值这个过程体。但正如我们在上一章博客《SICP:赋值和局部状态(Python实现)》中所讲的,一旦我们把赋值引入程序设计语言之后,这一定义就不再合适了。由于赋值的存在,变量已经不能再看作仅仅是某个值的名字,此时的变量必须以某种方式指定了一个“位置”(place),相应的值可以存储再那里。在我们新求值模型里,这种位置将维持在称为环境的结构中。一个环境就是帧(frame)的一个序列,每

SICP:求值和环境模型(Python实现)

绪论我们在第一章引进复合过程时,采用了求值的代换模型定义了将过程应用于实参(arguments)的意义:将一个复合过程应用于一些实参,也就意味着用实参替换过程体里对应的形参(formalparameters)之后,求值这个过程体。但正如我们在上一章博客《SICP:赋值和局部状态(Python实现)》中所讲的,一旦我们把赋值引入程序设计语言之后,这一定义就不再合适了。由于赋值的存在,变量已经不能再看作仅仅是某个值的名字,此时的变量必须以某种方式指定了一个“位置”(place),相应的值可以存储再那里。在我们新求值模型里,这种位置将维持在称为环境的结构中。一个环境就是帧(frame)的一个序列,每