1.1~1.5的一些概念
\(some\;concepts\;in\;from\;1.1\;to\;1.5\)
1.\(Environment\)
An environment in which an expression is evaluated consists of a sequence of frames, depicted as boxes. Each frame contains bindings, each of which associates a name with its corresponding value. Assignment and import statements add entries to the first frame of the current environment.
2.\(Function\) \(as\) \(abstractions\)
我们以下面这个简单的程序为例: 1
2
3
4
5
6from operator import add, mul
def square(x):
return mul(x, x)
def sum_squares(x, y):
return add(square(x), square(y))
我们可以写出求和平方,而不必考虑如何求一个数的平方。如何计算平方的细节可以去掉,以后再考虑。事实上,就\(sum\_square\)而言,\(square\)不是一个特定的函数体,而是一个函数的抽象,即函数抽象。我们可以将\(square\)看作一个“黑匣子”,我们放入一个值,然后函数输出一个值,而中间的实现细节我们并不关心。
为了掌握函数抽象的使用,考虑它的三个核心属性通常是有用的:
- 函数的域(domain) 是它可以接受的一组参数。
- 函数的范围(range) 是它可以返回的值的集合。
- 函数的目的(intent) 是它计算输入和输出之间的关系(以及它可能产生的任何副作用),可以看作是输入到输出的抽象映射。
例如对于\(sum\_square\),其:
- \(domain\):两个数。
- \(range\):非负实数。
- \(intent\):返回两个数的平方和。
这些属性没有指定如何执行意图;这些细节被抽象掉了。