这是一个翻译项目,原书为伯克利 CS61A 的配套教材 Composing Programs,也是计算机一大圣经 SICP 的 Python 版本。
项目现在为维护状态,如果您发现了翻译的错漏或含混之处,可以提交 issue 或者 PR,我会抽时间 review 或者修改。同时感谢所有参与翻译的同学,也感谢每一个给项目 star 的同学。
🦊 CS61A 教材 Composing Programs 的中文翻译
Home Page: https://composingprograms.netlify.app
License: MIT License
这是一个翻译项目,原书为伯克利 CS61A 的配套教材 Composing Programs,也是计算机一大圣经 SICP 的 Python 版本。
项目现在为维护状态,如果您发现了翻译的错漏或含混之处,可以提交 issue 或者 PR,我会抽时间 review 或者修改。同时感谢所有参与翻译的同学,也感谢每一个给项目 star 的同学。
接近小节末尾部分,原文:推广到 n 次方根,我们可以得到
正确应该是
对于除法,Python 提供了两个中缀运算符:/ 和 //。前者是常规除法,因此即使除数可以整除被除数,它也会产生浮点数或十进制值:
在这一段中,”它也会产生 浮点数 或十进制值” 的原文是 “so that it results in a floating point, or decimal value“,此处 ”decimal value“ 翻译成 ”十进制值“ 感觉不太方便初学者理解
参考剑桥辞典给出的英汉释义
DECIMAL翻译:十进位的, 小数; 十进小数
对于python初学者来说,“十进制值”的含义比较难以理解,且原文有floating point与decimal value有同义替换的意思,原版的中文翻译在文本上可能会带给读者一种“有可能生成浮点数,也有可能生成十进制值(另一种数值)”的偏差理解。
建议修改为:
对于除法,Python 提供了两个中缀运算符:/ 和 //。前者是常规除法,因此即使除数可以整除被除数,它也会产生浮点数(十进小数值):
非常感谢学长学姐们的贡献!!!辛苦啦!❤️
Name Evaluation. A name evaluates to the value bound to that name in the earliest frame of the current environment in which that name is found.
被翻译成了“名称求解(Name Evaluation):名称的计算结果为该名称所在环境中的最早的帧中与它绑定的值。”
推荐翻译:
名称求值,指的是:在环境寻找该名称,最早找到含有该名称的帧里边其绑定的值就是这个名称的计算结果。
in which that name is found这个限定性定语从句修饰的是the earliest frame,其实意思是,“在能找到这个名字的帧里边,最早找到的那个帧”。而不是“能找到这个名称的环境”里边的“最早的帧”。
常见的类别中的表格中,增长阶描述一栏,除了“常数”,其他四个的描述有串行,可能不是很准确。
“we find that similar classes differ in their amount of specialization. ”此句中的'classes'翻译成了“班级”,应该为“类”
翻译其实是一件非常适合开源新手的事情,你可以一边学习 CS61A 一边进行翻译,同时也可以熟悉开源流程,感受团队协作带来的乐趣。所以还是希望能有更多小伙伴参与进来,一起进步。
开启计划后,陆陆续续也有些 PR,但翻译质量良莠不齐,我由于工作原因也不能大量投入时间在 Review 上。
于是有很多未经 Review 就被合并的 PR(大部分没有遵守 中文文案排版指北 来做)。
所以如果有同学也想参与贡献但不想翻译大章,也可以通过 Review 来进行贡献,感谢!
对比 python官方英文和中文文档,发现在对复合语句的介绍时,英文的suite被翻译为中文的“句体”。
头部和缩进的语句组(suite)一起称为子句。复合语句由一个或多个子句组成:
建议将本仓库中 “1.5.2 复合语句”章节中的上述语句替换成如下语句:
头部和缩进的语句组(suite)一起称为子句。复合语句由一个或多个子句组成:
https://composingprograms.netlify.app/1/5
https://docs.python.org/3/reference/compound_stmts.html
https://docs.python.org/zh-cn/3/reference/compound_stmts.html
这两处都使用了 真值 这个词汇,但是表示的不是同一个意思,对应的英文原文也不是同一个词组。
Python 包含多个假值,包括 0、 None 和布尔值 False,所有其他数字都是**真值(true values)**。
布尔值(Boolean values):Python 有两个布尔值,分别叫做 True 和 False 。布尔值表示逻辑表达式中的**真值(truth values)**。
确实很难找到合适的词汇来分别对应这两个英语词语,建议在把 (truth values) 附在第二个 真值 后面,以示区别。
注意到 2.3 与 2.4 节翻译质量低,加之格式不符合标准,之前合并属实不该,现征集小伙伴重新翻译
Considering that project after class is also important, have you considered translating or expanding the project section?
project: http://composingprograms.com/projects.html
Thank you for your translation effort, and I am looking forward to your response.
frame 翻译为 框架,也许更合适
改进建议:
(1)对专业名词增加中英文对照表;
例如:
赋值:assignment
语句:statement
表达式:expression
(2)文中第一次出现某个专业名词时,在中文后面的括号内附上英文全名,如果有缩写也把缩写附上。
对于这一条建议,仓库中的翻译大部分地方实现了这一建议,只是偶尔有些地方有遗漏。
例如:第一次提到“语句”时,没有附上 statement 这个英文名。
https://composingprograms.netlify.app/1/5
1.5.1 语句
到目前为止,我们虽然主要思考的是如何计算求解表达式,但我们已经见过了三种语句:赋值(assignment)、 def 和 return 语句。尽管这些 Python 代码都包含表达式作为它们的一部分,但它们本身并不是表达式。
一些专有名词可以保留,优先放英文,括号里面再放中文.而不是反过来
python 3.6之后字典内的元素不再是乱序了,希望能加一行注释之类的~
您好,2.4中的566行(第九节Propagating Constraints)链接的图片无法打开。
An abstraction barrier violation occurs whenever a part of the program that can use a higher level function instead uses a function in a lower level.
每当程序中可以使用更高级别函数的一部分使用了较低级别的函数时,就会违反抽象屏障。
当程序中有一部分 本 可以使用更高级别函数 但却 使用了低级函数时,就会发生抽象屏障冲突。
(1)使用 “本” 和 “但却” 来体现英文原文中的 “instead” 。
(2)调整 “一部分” 在句子中的位置,更符合中文常见的语言组织形式。
最后,这个表达式
{w for w in words if len(w) == 6 and w[::-1] in words}
{'redder', 'drawer', 'reward', 'diaper', 'repaid'}
是一个复合表达式,它的计算结果是戏剧中所有正反拼写相同的单词的集合。神秘符号 w[::-1] 表示枚举单词中的每个字母,其中 -1 代表反向枚举。当你在交互式会话中输入该表达式时,Python 会在下一行打印它的值。
解释器:复合表达式的求解需要以一个可预测的方式来精确解释代码的过程。实现这样的过程,用于计算复合表达式的程序就称为解释器。解释器的设计和实现是第三章的主题。
这个解释有点问题
建议修改为:
https://composingprograms.netlify.app/
这是一个翻译项目,原书为伯克利 CS61A 的配套教材 Composing Programs,也是计算机一大圣经 Structure and Interpretation of Computer, SICP 的 Python 版本。
https://composingprograms.netlify.app/1/1
长期以来,我们都使用 Harold Abelson、Gerald Jay Sussman 和 Julie Sussman 三人编写的经典教科书《计算机程序的构造与解释》即 SICP(Structure and Interpretation of Computer) 来教授这些基本**,而本书大量借鉴了这本教科书。
最后一句,应为“不同类型的参数”。
>>> [n for n in range(1, 1000) if sum(divisors(n)) == n]
[6, 28, 496]
>>> [n for n in range(1, 1000) if sum(divisors(n)) == n]
[1, 6, 28, 496]
这个中文翻译仓库极大得提高了学习效率。
我在阅读中发现有个句子稍欠通顺,查了原文对照之后,提出一点改进建议,希望能给这个仓库做一点点贡献。
Compound statements typically span multiple lines and start with a one-line header ending in a colon, which identifies the type of statement.
复合语句通常跨越多行,以单行头部(header)开始,并以冒号结尾,冒号标识语句的类型。
为了体现原文中的which从句,建议翻译成:
复合语句通常跨越多行,以单行头部(header)开始,并以冒号结尾,其中 冒号标识语句的类型。
或者
复合语句通常跨越多行,以单行头部(header)开始,并以 标识语句类型的冒号 结尾。
“1.5.4 条件语句”章节中对“assign”的翻译有含混之处。
https://composingprograms.netlify.app/1/5
The expressions inside the header statements of conditional blocks are said to be in boolean contexts: their truth values matter to control flow, but otherwise their values are not assigned or returned.
条件块头部语句内的表达式被称为布尔上下文:它们值的真假对控制流很重要,另外,它们的值不会被 分配 或返回。
条件块头部语句内的表达式被称为布尔上下文:它们值的真假对控制流很重要,另外,它们的值不会被 赋值 或返回。
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
This repository currently has no open or pending branches.
package.json
@fontsource/jetbrains-mono ^5.0.9
katex ^0.16.8
markdown-it-smartarrows ^1.0.1
markdown-it-texmath ^1.0.0
vitepress 1.0.0-rc.4
vitepress-plugin-comment-with-giscus ^1.1.7
vue ^3.3.4
最后一句,应为“在不同的类中”。
2.2.3节表格下面第二段的第一句话:每当程序的一部分可以使用更高级别的函数而不是使用较低级别的函数时,就会违反抽象障碍。
读起来有些歧义,应该为:每当程序中可以使用更高级别函数的一部分使用了较低级别的函数时,就会违反抽象屏障。
或者改为:每当程序的一部分可以使用更高级别的函数却使用了较低级别的函数时,就会违反抽象障碍。
原文:An abstraction barrier violation occurs whenever a part of the program that can use a higher level function instead uses a function in a lower level.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.