编程界的圣经:从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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

掌握潮流,使用渐变色彩图标icon,打造独特风格!

渐变色图标icon非常抢眼,从日常使用频率最高的手机到街上随处可见的海报,通常色彩搭配出众,让人感觉很惊艳。对色彩搭配的不同理解会影响我们设计产品的最终性能。本文将带您了解在UI设计圈兴起的时尚色彩组合——什么是渐变色,如…

Docker进阶:深入理解 Dockerfile

Docker进阶:深入理解 Dockerfile 一、Dockerfile 概述二、为什么要学习Dockerfile三、Dockerfile 编写规则四、Dockerfile 中常用的指令1、FROM2、LABEL3、RUN4、CMD5、ENTRYPOINT6、COPY7、ADD8、WORKDIR9、 ENV10、EXPOSE11、VOLUME12、USER13、注释14、ONBUILD 命…

【Python】成功解决ZeroDivisionError: division by zero

【Python】成功解决ZeroDivisionError: division by zero 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订…

ROS2从入门到精通0-2:ROS2简介、对比ROS1与详细安装流程

目录 0 专栏介绍1 什么是机器人操作系统?2 ROS的发展历程3 ROS2与ROS1的区别4 ROS2安装4.1 基本安装4.2 测试ROS24.2.1 测试一:发布者与订阅者4.2.2 测试二:海龟仿真器 5 常见问题 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌…

CMake 交叉编译

想知道“魔笛手”在这里能发挥什么作用吗?想象一下,把 CMake 当做法力高强的魔笛手,C 的项目则是故事中的那些被魔笛手拯救的孩子。 父母要抚养一个孩子并非易事,营养需要面面俱到,保证身体健康,关心事无巨…

【周总结周末日常】

周总结 完成任务开发并且与前端联调通过 完成已开发功能的冒烟测试 修复测试中出现的一些数据显示问题 2024/3/10 晴 温度适宜 这周天气比上周好多了,最起码见到好几次太阳 周六在世纪公园溜达一会儿,偶尔呼吸下大自然,挺棒的…

wpscan专门针对wordpress的安全扫描工具

说明 WPScan是一款专门针对WordPress的漏洞扫描工具,它使用Ruby编程语言编写。WPScan能够扫描WordPress网站中的多种安全漏洞,包括WordPress本身的漏洞、插件漏洞和主题漏洞。此外,WPScan还能扫描类似robots.txt这样的敏感文件,并…

Clion attach一个linux进程进行debug

背景 手头的一段程序&#xff0c;目前已经在linux上运行了&#xff0c;我在windows上有源代码&#xff0c;想在本地debug一下&#xff0c;看看代码里复杂的流程都是怎么样运行的。 代码样例 # fileName:calculateSum.cpp #include <iostream>int main() {int num1, nu…

C++程序设计-第四/五章 函数和类和对象【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下C程序设计中的重点概念&#xff0c;以供大家期末复习和考研复习的时候使用。 C程序设计系列文章传送门&#xff1a; 第一章 面向对象基础 第四/五章 函数和类和对象 第六/七/八章 运算符重载/包含与继承/虚函…

FX110网:在CP Markets申请出金四个多月了,没任何消息!

近期&#xff0c;本站收到一中国汇友投诉&#xff0c;称其CP Markets平台已数月无法出金&#xff0c;平台方也没有任何回应。在货币市场闯荡久了的“老鸟”就会知道&#xff0c;平台无故不给出金必定有妖&#xff0c;更何况还是长达数月&#xff01; 在CP Markets申请出金四个多…

LINE社群:为您的跨境出海业务带来更多流量

LINE 社群就是一个大型的公开聊天室&#xff0c;通过LINE社群不需要将对方添加为好友就可以聊天。它主要是以「兴趣」作为区分&#xff0c;所以商家可以在社群中找到不少潜在客户。尤其是面向台湾、日本、泰国这些地区的商家&#xff0c;LINE在这些地区的普及度很高&#xff0c…

10000的单子谈崩了,坚持用beego什么骚操作?

今天有个客户询盘&#xff0c;想仿制一个旅游的网站&#xff0c;一句话差点让我当场拒绝&#xff1a;前端都是静态的&#xff0c;网上有很多工具可以下载源代码&#xff0c;后端接入支付&#xff0c;做个简单的统计&#xff0c;客服&#xff0c;再接入google地图就行了...... 简…

【JAVA重要知识 | 第六篇】Java集合类使用总结(List、Set、Map接口及常见实现类)以及常见面试题

文章目录 6.Java集合类使用总结6.1概览6.1.1集合接口类特性6.1.2List接口和Set接口的区别6.1.3简要介绍&#xff08;1&#xff09;List接口&#xff08;2&#xff09;Set接口&#xff08;3&#xff09;Map接口 6.2Collection接口6.3List接口6.3.1ArrayList6.3.2LinkedList—不常…

PyCharm无代码提示解决

PyCharm无代码提示解决方法 在使用PyCharm工具时&#xff0c;调用方法却无法进行提示&#xff0c;针对PyCharm无代码提示整理下解决方案 1、Python内置语法无智能提示 复现&#xff1a;我这里以urllib库读取网页内容为例&#xff0c;在通过urlopen(&#xff09;之后调用getur…

Python打包为可执行文件

一文带你搞定python脚本(.py)打包为可执行文件(.exe) 文章目录 一文带你搞定python脚本(.py)打包为可执行文件(.exe)01、为什么要打包Python脚本&#xff1f;02、打包步骤&#xff1f;第一步&#xff1a;环境配置与操作包安装第二步&#xff1a;开始打包第三步&#xff1a;输入…

汽车行业一项网络安全标准实践指南发布,SSL证书助力传输通道加密,确保数据安全

2024年3月7日&#xff0c;全国网络安全标准化技术委员会秘书处发布了《网络安全标准实践指南——车外画面局部轮廓化处理效果验证》&#xff08;以下简称《实践指南》&#xff09;&#xff0c;旨在指导汽车数据处理者对车外画面进行人脸、车牌局部轮廓化处理效果的自行验证。《…

图的链式前向星存储与搜索

图的存储与搜索 链式前向星存储 图的存储方式有很多种&#xff0c;但是也都有各自的优缺点。例如&#xff1a;采用邻接矩阵的形式存储的时候&#xff0c;存储比较简单&#xff0c;但是遍历或者处理的时候就会比较浪费时间&#xff1b;而采用邻接表存储&#xff0c;则效率会有…

无需修改配置springboot启动多个不同端口的启动类

idea:2023 1.4版本 复制原先启动类&#xff0c;原先没有启动类&#xff0c;点击上方➕添加启动类 需要配置不同的端口号&#xff0c;其他默认 点击应用即可

ARM地址映射表

硬件控制原理 只有Load/start指令可以读写硬件控制器量的寄存器&#xff0c;从而操作硬件地址划分图如下(其中IO(SFR)用来操控硬件的)&#xff1a;注意&#xff1a;对于一个32位的处理器&#xff0c;里面的所有寄存器都是32位地址&#xff0c;所以范围位2的32次方&#xff0c;…

Tab组件的编写与动态日期的函数封装

src\components\Tab\Icon.vue 底部导航栏子组件。 <template><router-link :to"path" class"tab-icon"><i class"icon">{{iconText}}</i><p class"text"><slot>{{ tabText }}</slot></…