编程界的圣经:从Scheme到JavaScript构建你的计算思维

文章目录

    • 适读人群
    • 目 录


《计算机程序的构造和解释》(Structure and Interpretation of Computer Programs,简记为SICP)是MIT的基础课教材,出版后引起计算机教育界的广泛关注,对推动全世界大学计算机科学技术教育的发展和成熟产生了很大影响。这本书的第1版于1984年出版,第2版于1996年出版,至今已被全世界100多所大学采用为教材,其中包括斯坦福大学、普林斯顿大学、牛津大学等。

图片

书号: 9787111630548 书号:9787111630548 书号:9787111630548

出版时间: 2019.07.01 出版时间:2019.07.01 出版时间:2019.07.01

机械工业出版社把SICP(第2版)引进中国,于2004年出版,至今已近20年了。令人感兴趣的是,SICP至今仍然受到国内关心计算机科学技术的人们,特别是计算机专业的优秀学生和青年计算机工作者的关注。

与许多计算机科学领域的入门教材不同,SICP的最主要关注点并不在基础语言中各种编程结构的形式和意义,也没有深入讨论巧妙或深刻的算法。与众不同地,一方面,SICP注目于帮助读者理解基于计算的观点看世界、看问题的重要性,掌握相关的基本概念和观点,建立基于计算思考问题的习惯,也就是今天人们常说的计算思维。另一方面,SICP也深入讨论了通过计算的方式处理和解决问题时必须掌握的主要技术与方法,最重要的就是分解问题和组织计算,以及建立和使用抽象的各种技术与方法。

SICP的章节目录清晰地反映了作者的基本想法:

第1、2两章分别讨论函数(或过程)抽象和数据抽象的作用,它们的建立和使用;

第3章讨论抽象数据对象本身的状态和变化,相关的模块化的问题及其在计算实践中的重要性;

第4章讨论元语言抽象,也就是设计和实现面向应用的新语言的问题;

第5章可以看作前面讨论的应用,而应用的对象问题就是JavaScript语言在寄存器机器上的实现。这里的寄存器机器是现代计算机的抽象模型,这里的讨论也说明了抽象的高级语言如何落地。

读者现在拿在手里的这本书是SICP的一个改编本(SCIP JS)。与SICP的不同之处,就在于这个改编本用更多计算机工作者熟悉的JavaScript语言作为讨论的工具,而没有用原SICP里使用的Scheme语言。因此,这里程序实例的形式更接近各种常规的编程语言,可能更容易被更多读者接受。本书的内容是原SICP的翻版,作者编写本书的基本目标是尽可能完整准确地反映原书的宗旨和精神,同时又使这些能被更多的人理解和重视。
图片

书号: 9787111734635 书号:9787111734635 书号:9787111734635

出版时间: 2024 − 02 − 01 出版时间:2024-02-01 出版时间:20240201

由于本书的根源和作者的意图,本书的基本内容和结构都来自SICP,许多一般性的讨论直接来自原书,但也有许多地方针对JavaScript做了一些调整和修改。本书比较好地反映了SICP的思想,是一本非常好的学习计算机科学技术的读物,值得每一个关心计算机领域,并有心在这个领域中深入学习和努力工作的人士阅读学习。

正如作者所言,这本书并不想作为JavaScript的入门教科书。书中对JavaScript语言的介绍远非完整,读者不应该希冀通过阅读本书学习JavaScript编程。但另一方面,由于本书的宗旨和内容,对它的学习一定会有助于读者学习JavaScript(一般而言,学习任何常见的编程语言,如Java、Python或C)。如果读者学过JavaScript(或其他编程语言),阅读这本书能帮助你更好地理解程序设计和一般的软件开发,从而有可能在这些领域中做得更出色、更高效、更得心应手。如果本书是你学习计算机科学技术的第一本书(或者学的第一门课),这段学习经历能为你今后的学习建立一个坚实的基础,帮助你更顺利地度过这段专业学习。无论如何,认真地阅读这本书,都是一件非常值得做的事情。

对于本书的学习,必须和相应的实际编程、用计算机解决问题的实践相结合。只读不做,当然不可能真正领悟计算机科学技术的真谛。另一方面,只是抄录、运行和试验书中给出代码,也不能得到其中的真传。作为这本书的真正有心的读者,你必须亲自一次次地经历使用计算机(通过编程)解决问题的实践过程。本书的作者已经为读者提供了学习所需的许多材料和资源,希望读者好好利用。

适读人群

  • 计算机、电子工程及相关专业本科生

目 录

Structure and Interpretation of Computer Programs: JavaScript Edition
译者序
序言
1984年版《计算机程序的构造和解释》的原序
前言
1996SICP2版的前言
1984SICP1版的前言
致谢
1996SICP2版的致谢
第1章 构造函数抽象1
1.1 程序设计的基本元素2
1.1.1 表达式3
1.1.2 命名和环境4
1.1.3 运算符组合式的求值5
1.1.4 复合函数6
1.1.5 函数应用的代换模型8
1.1.6 条件表达式和谓词11
1.1.7 实例:用牛顿法求平方根14
1.1.8 函数作为黑箱抽象17
1.2 函数与它们产生的计算20
1.2.1 线性递归和迭代21
1.2.2 树形递归24
1.2.3 增长的阶28
1.2.4 求幂29
1.2.5 最大公约数31
1.2.6 实例:素数检测33
1.3 用高阶函数做抽象37
1.3.1 函数作为参数37
1.3.2 用lambda表达式构造函数41
1.3.3 函数作为通用的方法45
1.3.4 函数作为返回值482章 构造数据抽象54
2.1 初识数据抽象56
2.1.1 实例:有理数的算术运算56
2.1.2 抽象屏障59
2.1.3 数据是什么意思?61
2.1.4 扩展练习:区间算术63
2.2 层次性数据和闭包性质65
2.2.1 序列的表示66
2.2.2 层次结构72
2.2.3 序列作为约定的接口76
2.2.4 实例:一个图形语言86
2.3 符号数据96
2.3.1 字符串96
2.3.2 实例:符号求导97
2.3.3 实例:集合的表示102
2.3.4 实例:Huffman编码树108
2.4 抽象数据的多重表示114
2.4.1 复数的表示115
2.4.2 带标签数据118
2.4.3 数据导向的程序设计和可加性121
2.5 包含通用型操作的系统127
2.5.1 通用型算术运算128
2.5.2 不同类型数据的组合131
2.5.3 实例:符号代数1363章 模块化、对象和状态146
3.1 赋值和局部状态146
3.1.1 局部状态变量147
3.1.2 引进赋值带来的利益152
3.1.3 引进赋值的代价155
3.2 求值的环境模型159
3.2.1 求值规则160
3.2.2 简单函数的应用163
3.2.3 框架作为局部状态的仓库165
3.2.4 内部定义169
3.3 用变动数据建模172
3.3.1 可变的表结构172
3.3.2 队列的表示179
3.3.3 表格的表示182
3.3.4 数字电路模拟器187
3.3.5 约束传播196
3.4 并发:时间是一个本质问题205
3.4.1 并发系统中时间的性质206
3.4.2 控制并发的机制209
3.5 流218
3.5.1 流作为延迟的表219
3.5.2 无穷流225
3.5.3 流计算模式的应用230
3.5.4 流和延迟求值238
3.5.5 函数式程序的模块化和对象的模块化2424章 元语言抽象246
4.1 元循环求值器248
4.1.1 求值器的核心部分249
4.1.2 组件的表示254
4.1.3 求值器的数据结构263
4.1.4 把求值器作为程序运行267
4.1.5 以数据为程序270
4.1.6 内部声明272
4.1.7 分离语法分析与执行275
4.2 惰性求值280
4.2.1 正则序和应用序280
4.2.2 采用惰性求值的解释器281
4.2.3 流作为惰性的表288
4.3 非确定性计算289
4.3.1 搜索和amb291
4.3.2 非确定性程序实例294
4.3.3 实现amb求值器300
4.4 逻辑程序设计309
4.4.1 演绎式信息检索311
4.4.2 查询系统如何工作320
4.4.3 逻辑程序设计是数理逻辑吗?326
4.4.4 实现查询系统3305章 寄存器机器里的计算350
5.1 寄存器机器的设计351
5.1.1 一种描述寄存器机器的语言352
5.1.2 机器设计的抽象355
5.1.3 子程序357
5.1.4 使用栈实现递归360
5.1.5 指令总结364
5.2 寄存器机器的模拟器365
5.2.1 机器模型366
5.2.2 汇编器369
5.2.3 指令和它们的执行函数372
5.2.4 监视机器执行378
5.3 存储分配和废料收集380
5.3.1 把存储器看作向量380
5.3.2 维持一种无穷存储的假象384
5.4 显式控制的求值器389
5.4.1 分派器和基本求值390
5.4.2 函数应用的求值393
5.4.3 块结构、赋值和声明400
5.4.4 求值器的运行401
5.5 编译405
5.5.1 编译器的结构407
5.5.2 组件的编译411
5.5.3 编译函数应用和返回语句417
5.5.4 指令序列的组合423
5.5.5 编译代码的实例426
5.5.6 词法地址433
5.5.7 将编译代码与求值器接口435
参考文献441
索引447
练习列表490

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/736504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

INA226电流/功率计模块使用方法

之前的文章简要介绍了开源INA226电流计模块的功能特点,本文将详细介绍INA226电流计模块的使用方法。 特性 感测总线电压范围:0V - 36V高侧/低侧电流感测电压、电流、功率测量0.1% 增益误差10uV 偏移可配置测量平均值16个可配置I2C地址2.7V - 5.5V 电源…

Microsoft SQL Server 编写汉字转拼音函数

目录 应用场景 举例 函数实现 小结 应用场景 在搜索应用中,我们一般会提供一个搜索框,输入关健字,点击查询按钮以获取结果数据。大部分情况我们会提供模糊查询的形式以在一个或多个字段进行搜索以获取结果。这样可以简化用户的操作&…

(C语言)strlen函数模拟实现(三种方法)

目录 1. strlrn函数 2. 注意事项&#xff1a; 3. 计数器法 4. 指针减指针方法&#xff1a; 5. 递归方法&#xff1a; 1. strlrn函数 头文件<string.h> 实现函数模拟须知&#xff1a; • 字符串以 \0 作为结束标志 &#xff0c;strlen函数返回的是在字符串中 \0 …

[AutoSar]BSW_Com010 CAN IF 模块介绍

目录 关键词平台说明一、CAN IF 所在架构位置二、CAN interface 简介三、CAN interface 主要功能描述3.1 CANIF 被调用方式3.1.1 中断模式3.1.2 轮询模式3.1.3 混合模式 3.2 Hardware object handles&#xff08;HO&#xff09;3.4 Dynamic L-PDUs3.4.1 Dynamic Transmit L-PDU…

HSCCTF 3th 2024 Web方向 题解wp

WEB-CHECKIN【*没出】 直接给了源码 <?php highlight_file(__FILE__); error_reporting(0); $a$_POST[1]; $b"php://filter/$a/resource/dev/null"; if(file_get_contents($b)"2024"){echo file_get_contents(/flag); }else{echo $b; }咋这么像 WEB…

人工智能迷惑行为大赏(AI智障)

目录 人工智能 人工智能的“幽默”瞬间 技术原理探究 社会影响分析 人工智能 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是一个涵盖了多个学科的综合领域&#xff0c;主要研究如何应用计算机来模拟人类的某些思维过程和智能行为&#xff0c;如…

阿里云-零基础入门推荐系统 【Baseline】

文章目录 赛题介绍评价方式理解赛题理解代码实战导包df节省内存函数读取采样或全量数获取 用户 - 文章 - 点击时间字典获取点击最多的topk个文章itemcf的物品相似度计算itemcf 的文章推荐给每个用户根据物品的协同过滤推荐文章召回字典转换成df生成提交文件获取测试集从所有的召…

mysql如何开启手动提交事务

在mysql中&#xff0c;有一个变量autocommit&#xff0c;表示自动提交&#xff0c;默认为1&#xff0c;表示开启自动提交。通过以下命令查询 select autocommit;当autocommit为1时&#xff0c;任何一条sql语句都是一个事务&#xff0c;执行完由mysql自动提交。如果想自己决定什…

matlab 基操~

MATLAB基本操作 1. 对象定义 使用sym定义单个对象、使用syms定义多个对象 2. 使用limit求极限 $$ \lim_{v \rightarrow a} f(x) $$ limit(f,v,a) % 使用limit(f,v,a,left)可求左极限 3. 导数 使用diff(f,v,n)对$ f(v)v^{t-1} $求 $ n $ 阶导 $ \frac{d^nf}{d^nv} $&#xf…

智谱清华LongAlign发布:重塑NLP长文本处理

引言 随着大型语言模型&#xff08;LLMs&#xff09;的不断进化&#xff0c;我们现在能够处理的文本长度已经达到了前所未有的规模——从最初的几百个tokens到现在的128k tokens&#xff0c;相当于一本300页的书。这一进步为语义信息的提供、错误率的减少以及用户体验的提升打…

MySQL三种日志

一、undo log&#xff08;回滚日志&#xff09; 1.作用&#xff1a; &#xff08;1&#xff09;保证了事物的原子性 &#xff08;2&#xff09;通过read view和undo log实现mvcc多版本并发控制 2.在事务提交前&#xff0c;记录更新前的数据到undo log里&#xff0c;回滚的时候读…

java学习之路-数据类型与变量

目录 数据类型与变量 1. 字面常量 2. 数据类型 3. 变量 3.1 变量概念 3.2 整型变量 3.2.1 整型变量 3.2.2 长整型变量 3.2.3 短整型变量 3.2.4 字节型变量 3.3 浮点型变量 3.3.1 双精度浮点型 3.3.2 单精度浮点型 3.4 字符型变量 3.5布尔型变量 3.6 类型转换 …

苍穹外卖学习-----2024/03/010---修改套餐,套餐状态修改开发

修改套餐 4.1 需求分析和设计 产品原型&#xff1a; 接口设计&#xff08;共涉及到5个接口&#xff09;&#xff1a; 根据id查询套餐根据类型查询分类&#xff08;已完成&#xff09;根据分类id查询菜品&#xff08;已完成&#xff09;图片上传&#xff08;已完成&#xf…

Linux 地址空间

目录 一、程序地址空间 1、虚拟地址 Makefile新写法 2、进程地址空间分布 3、栈&堆 4、static修饰局部变量 5、字符串常量不可修改 6、虚拟地址与物理地址的联系 二、CPU读取程序全过程 1、形成可执行程序 2、生成虚拟地址 3、程序的启动 4、创建进程 5、地…

【Redis】RedisTemplate序列化传输数据

使用自定义的序列化器 使用RedisTemplate默认的序列化器发送数据&#xff0c;会将key全都当成Object处理&#xff0c;从而按照对象的方式转成json格式发送到服务器&#xff0c;这样会导致两个问题。一是不方便阅读&#xff0c;二是会大大浪费内存。因此&#xff0c;建议自定义…

Linux之线程控制

目录 一、POSIX线程库 二、线程的创建 三、线程等待 四、线程终止 五、分离线程 六、线程ID&#xff1a;pthread_t 1、获取线程ID 2、pthread_t 七、线程局部存储&#xff1a;__thread 一、POSIX线程库 由于Linux下的线程并没有独立特有的结构&#xff0c;所以Linux并…

一篇搞定mysql数据库基础

目录 一、MySQL具体的特点 1.关系型数据库&#xff08;RDBMS&#xff09;&#xff1a; 2.MySQL是一个“客户端-服务器”结构的程序 Q1:服务器能不能知道客户端什么时候发请求&#xff1f;&#xff1f; Q2:服务器是只给一个客户端提供服务吗&#xff1f;&#xff1f; 二、M…

LeetCode 80.删除有序数组中的重复项 II

目录标题 删除有序数组中的重复项 II题目解题思路实现代码代码讲解总结删除有序数组中的重复项 II 题目 解题思路 慢指针指向满足条件的数字的末尾,快指针遍历原数组。 并且用一个变量记录当前末尾数字出现了几次,防止超过两次。最后返回维护慢指针的结果+1即可。 实现代…

ChatGPT用不了,发了没反应,终于解决了!

大概在几天前的早上&#xff0c;ChatGPT突然就用不了。 这完全打乱了我的工作节奏&#xff01;&#xff01;&#xff01;&#xff08;所以&#xff0c;我就去玩了&#xff09; 用不了的具体表现是&#xff0c;你输入内容之后&#xff0c;内容消失&#xff0c;按钮变灰&#xff…

上位机图像处理和嵌入式模块部署(qmacvisual条形码识别)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们谈到过&#xff0c;qmacvisual提供功能的方式主要就是插件导入。目前&#xff0c;大家如果能正确地把qmacvisual编译出来的话&#xff0c;…