数学上的闭包概念及与编程的关系

简要介绍了数学上闭包的概念及其性质在编程领域的应用.

首先, 需要强调一点, 这里谈论的 闭包(closure) 概念是指数学上的, 不是我们编程界一般谈论的那个闭包.

在编程实践中, 闭包另有定义, 是一种为表示带有自由变量的过程而用的实现技术.

但另一方面, 这个数学上的闭包概念在编程实践中依然是有体现, 虽然不同于编程界一般谈论的那个闭包, 后面会举一些例子加以说明.

闭包到底是什么?

闭包在数学上是一个比较抽象的概念, 来自于抽象代数, 因此这里不打算直接给出它的定义, 否则大家看了估计还是一头雾水, 为便于理解, 还是先从具体的例子出发, 最后才给出它的定义.

继续阅读

重复性管理——抽象的重要性(上)

什么是抽象及它在重复性管理中的作用

Haskell 语言的设计者之一 Paul Hudak 曾说过一句略带夸张的话(overstatement):编程中最重要的三件事是:抽象,抽象,抽象

abstraction, abstraction, abstraction”are the three most important things in programming。

如果你去问一些资深开发者,程序员最重要的的能力之一有哪些?那么“抽象的能力”是绝对能排得上号的。

继续阅读

重复性管理——从泛值到泛型以及泛函(下)

在前面我们谈论了重复性管理上的一些具体做法,重点探讨了泛型范式泛函范式在解决重复性问题上的应用。因为前面的篇幅有很多被具体的代码例子占据了,所以留到现在这篇做一个归纳总结。

与数学的渊源

应该说,编程与数学还是颇有渊源的,或者说它们之间有很多相通的地方。数学的一个突出特点,那就是数学家总是在不断寻求更加一般化的表述,更为抽象的表达。我们来看一个具体的例子。

数学上有所谓的勾股数,最知名的就是我们所熟知的“勾三股四玄五”了。具体而言就是 3^2 + 4^2 = 5^2.

继续阅读

重复性管理——从泛值到泛型以及泛函(中)

在前面,我们探讨了泛型范式在解决重复性问题上的应用,在这里,将继续探讨泛函范式在解决重复性问题上的作用。

注:关于“泛函(functional)”这一名称,前面说了,泛型的本质是“参数化类型”,那么,按照这一思路,泛函的意思也可以理解为“函数的参数化”或者现在时髦的所谓“函数式编程(functional programming)”吧!

当然,你可以有自己的看法,这里用这种比较概括性的说法可以使得标题等比较简短,我也承认,很多时候,想取一个简短又准确的名字是不容易的。

继续阅读

计算机科学是什么?——读书笔记

介绍了什么是计算机科学,以及为什么说它不是科学也与计算机无关。

什么是计算机科学呢?我们可能很容易望文生义地理解为“不就是关于计算机的科学吗?”然而一位来自 MIT 计算机系的教授认为“计算机科学”不但不是科学,而且还跟计算机无关!这是怎么回事呢?

继续阅读