观海听涛
Waiting for you

数学家的幽默

26 Mar 2013

在王垠的博客里看到这样一段话:

其实我一直都在想,如果把数学看成是一种程序语言,它也许就是世界上语法最糟糕的语言。数学里的“变量”,几乎总是没有明确定义的作用域(scope)。也就是说他们只有“全局变量”。上一段话的 x,跟下一段话的 x,经常指的不是同一个东西。所以训练有素的数学家,总是避免使用同一个符号来表示两种不同的东西。很快他们就发现所有的拉丁字母都用光了,于是乎开始用希腊字母。大写的,小写的,粗体的,斜体的,花体的,…… 而其实,他们只不过是想实现 C++ 里的 “namespace”。

觉得甚是有道理啊,以后不会一看到长条的公式就头疼了。终于明白为什么中国出不了多少数学家了,如果用中文来实现一个namespace,那估计连设计者自己都会被搞蒙。中文是象形文字发展而来的,这样的编码方式在效率上来说是比较低的,在信息论上叫什么来着,忘了。

还有一段:

关于“前缀表达式”与“中缀表达式”,我有一个很独到的见解:我觉得“中缀表达式”其实是一种过时的,来源于传统数学的历史遗留产物。几百年以来,人们都在用 x+y 这样的符号来表示加法。之所以这样写,而不是 (+ x y),是因为在没有计算机以前,数学公式都得写在纸上,写 x+y 显然比 (+ x y) 方便简洁。但是,中缀表达式却是容易出现歧义的。如果你有多个操作符,比如 1+2*3。那么它表示的是 (+ 1 (* 2 3)) 呢,还是 (* (+ 1 2) 3)?所以才出现了“运算符优先级”这种东西。看见没有,S表达式已经在这里显示出它没有歧义的优点。你不需要知道 + 和 * 的优先级,就能明白 (+ 1 (* 2 3)) 和 (* (+ 1 2) 3) 的区别。第一个先乘后加,而第二个先加后乘。

我们不应该局限于前人的一些设计,而是要打破这个设计,寻找更加符合实际需求的方法。

没用过Lisp,貌似很简单很科学的样子,不过我觉得这括号打多了也不好吧。计算机分析起来倒是挺容易,人看起来估计会有点乱。