# 1.1编程要素

> 译者： [https://sicp.comp.nus.edu.sg/chapters/2](https://sicp.comp.nus.edu.sg/chapters/2)



功能强大的编程语言不只是指示计算机执行任务的手段。 该语言还用作我们组织有关流程的想法的框架。 因此，当我们描述一种语言时，我们应特别注意该语言提供的将简单思想组合成更复杂思想的方式。 每种强大的语言都有三种实现此目的的机制：

*   **基本表达式**，表示语言所关注的最简单的实体，
*   **表示组合**，通过它可以从较简单的元素构建复合元素，并且
*   **抽象手段**，通过它可以命名复合元素并将其作为单元进行操作。

在编程中，我们处理两种元素：函数和数据。 （稍后我们会发现它们确实并没有那么明显。）非正式地，数据是我们要操纵的&lt;quote&gt;东西&lt;/quote&gt;，功能是对操纵数据的规则的描述。 因此，任何功能强大的编程语言都应能够描述原始数据和原始函数，并应具有用于组合和抽象函数和数据的方法。

在本章中，我们将仅处理简单的数值数据，以便我们专注于构建函数的规则。 [[1]](2#footnote-1) 在后面的章节中，我们将看到这些相同的规则允许我们构建用于操纵复合数据的函数。

* * *

[[1]](2#footnote-link-1) The characterization of numbers as <quote>simple data</quote> is a barefaced bluff. In fact, the treatment of numbers is one of the trickiest and most confusing aspects of any programming language. Some typical issues involved are these: How large a number can we represent? How many decimal places of accuracy can we represent? Above and beyond these questions, of course, lies a collection of issues concerning roundoff and truncation errors—the entire science of numerical analysis. Since our focus in this book is on large-scale program design rather than on numerical techniques, we are going to ignore these problems. The numerical examples in this chapter will exhibit the usual roundoff behavior that one observes when using arithmetic operations that preserve a limited number of decimal places of accuracy in noninteger operations.

