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
6
from 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\):返回两个数的平方和。

  这些属性没有指定如何执行意图;这些细节被抽象掉了