Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
"fs-extra": "^11.3.0",
"http-server": "^14.1.1",
"husky": "^9.1.7",
"js-slang": "^1.0.74",
"js-slang": "^1.0.85",
"lz-string": "^1.5.0",
"prettier": "^3.6.2",
"xmldom": "^0.6.0",
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
407 changes: 407 additions & 0 deletions xml/zh_CN/chapter1/chapter1.xml

Large diffs are not rendered by default.

125 changes: 125 additions & 0 deletions xml/zh_CN/chapter1/section1/section1.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
<SECTION>

<LABEL NAME="sec:elements-of-programming"></LABEL>


<INDEX>编程<SUBINDEX>的要素</SUBINDEX><OPEN></OPEN></INDEX>



<SECTIONCONTENT></SECTIONCONTENT>



<TEXT>
一种强大的编程语言不仅仅是指示计算机执行任务的手段。这种语言还作为一种框架,让我们构思和组织关于过程的理念。因此,当我们描述一种语言时,应该特别关注该语言提供的将简单理念组合成更复杂理念的手段。每一种强大的语言都有三种机制来实现这一点:
<UL>
<LI>
<B>primitive expressions</B>,
<INDEX>primitive expression</INDEX>
它们代表该语言所关注的最简单实体,
</LI>
<LI>
<B>means of combination</B>, 由
<INDEX>means of combination</INDEX>
<INDEX>combination, means of<FRAGILE></FRAGILE></INDEX>
构建简单元素以形成更复杂元素,
</LI>
<LI>
<B>means of abstraction</B>,
<INDEX>means of abstraction</INDEX>
通过它可以将复合元素命名并作为单元进行操作。
</LI>
</UL>
</TEXT>



<TEXT>
在编程中,我们处理两种类型的元素:
<SPLITINLINE>
<SCHEME>
<INDEX>procedure</INDEX>
过程
</SCHEME>
<JAVASCRIPT>
<INDEX><FUNCTION></FUNCTION></INDEX>
函数
</JAVASCRIPT>
</SPLITINLINE>
<INDEX>data</INDEX>
数据。(稍后我们将发现它们实际上并不那么不同。)
非正式地,数据就是我们想操作的<QUOTE>东西</QUOTE>,而
<SPLITINLINE>
<SCHEME>过程</SCHEME>
<JAVASCRIPT>函数</JAVASCRIPT>
</SPLITINLINE>
是描述操作数据规则的方法。
因此,任何强大的编程语言都应该能够描述原始数据和原始
<SPLITINLINE>
<SCHEME>过程</SCHEME>
<JAVASCRIPT>函数</JAVASCRIPT>
</SPLITINLINE>
,并且应该拥有用于组合和抽象
<SPLITINLINE>
<SCHEME>过程</SCHEME>
<JAVASCRIPT>函数</JAVASCRIPT>
</SPLITINLINE>
以及数据的方法。
</TEXT>



<TEXT>
在本章中,我们只处理简单的
<INDEX>numerical data</INDEX>
<INDEX>data<SUBINDEX>numerical</SUBINDEX></INDEX>
数值数据,以便让我们能够专注于构建
<SPLITINLINE><SCHEME>procedures</SCHEME><JAVASCRIPT>functions</JAVASCRIPT></SPLITINLINE>的规则。<FOOTNOTE>
<LABEL NAME="foot:number-representation"></LABEL>
将数字描述为<QUOTE>简单数据</QUOTE>的这一表征是一种赤裸裸的虚张声势。事实上,对于任何编程语言来说,数字处理是最棘手且最令人困惑的方面之一。一些典型的问题包括:
<INDEX>integer(s)</INDEX>
<INDEX>real number</INDEX>
<INDEX>number(s)<SUBINDEX>integer vs.<SPACE></SPACE>real number</SUBINDEX></INDEX>
一些计算机系统将<EM>整数</EM>(例如2)与<EM>实数</EM>(例如2.71)区分开来。实数2.00是否与整数2不同?用于整数的算术运算与用于实数的运算相同吗?6除以2的结果是3还是3.0?我们能够表示的数字有多大?我们能够表示的精确小数位数是多少?整数的范围是否与实数的范围相同?
<INDEX>numerical analysis</INDEX>
<INDEX>roundoff error</INDEX>
<INDEX>truncation error</INDEX>
除了这些问题之外,当然还有一系列关于舍入和截断误差的问题<EMDASH></EMDASH>这构成了整门数值分析科学。由于本书的重点是大规模程序设计而非数值技术,我们将忽略这些问题。本章中的数值示例将展示在非整数运算中保留有限小数精度时通常观察到的舍入行为。
</FOOTNOTE>
后续章节中,我们将看到,这些相同的规则也允许我们构建
<SPLITINLINE>
<SCHEME>procedures</SCHEME>
<JAVASCRIPT>functions</JAVASCRIPT>
</SPLITINLINE>
来操作复合数据。
<INDEX>programming<SUBINDEX>elements of</SUBINDEX><CLOSE></CLOSE></INDEX>
</TEXT>


<!-- Subsection 1 : Expressions -->
&amp;subsection1.1.1;

<!-- Subsection 2 : Naming and the Environment -->
&amp;subsection1.1.2;

<!-- Subsection 3 : Evaluating Combinations -->
&amp;subsection1.1.3;

<!-- Subsection 4 : Compound Procedures -->
&amp;subsection1.1.4;

<!-- Subsection 5 : The Substitution Model for Procedure Application -->
&amp;subsection1.1.5;

<!-- Subsection 6 : Conditional Expressions and Predicates -->
&amp;subsection1.1.6;

<!-- Subsection 7 : Example: Square Roots by Newtons Method -->
&amp;subsection1.1.7;

<!-- Subsection 8 : Procedures as Black-Box Abstractions -->
&amp;subsection1.1.8;

</SECTION>
Loading
Loading