青羽的博客

恭喜你发现了一个不为人知的小岛

关于改进符号体系的建议

数学和编程

举一个非常简单的例子。如果你说 $cos^2θ$ 表示 $(cos θ)^2$,那么理所当然,$cos^{-1}θ$ 就应该表示 $1/(cos θ)$ 了?可它偏偏不是!别被数学老师们的教条和借口欺骗啦,他们总是告诉你:“你应该记住这些!” 可是你想过吗:凭什么? $cos^2θ$ 表示 $(cos θ)^2$,而 $cos^{-1}θ$,明明是一模一样的形式,表示的却是 $arccos θ$。一个是求幂,一个是调用反函数,风马不及,却写成一个样子。这样的语言设计混淆不堪,却喜欢以“约定俗成”作为借口。
如果你再多看一些数学书,就会发现这只是数学语言几百年累积下来的糟粕的冰山一角。数学书里尽是各种上标下标,带括号的上标下标,x,y,z,a,b,c,f,g,h,各种扭来扭去的希腊字母,希伯来字母…… 斜体,黑体,花体,双影体,……用不同的字体来表示不同的“类型”。很多符号的含义,在不同的子领域里面都不一样。有些人上一门数学课,到最后还没明白那些符号是什么意思。
直到今天,数学家们写书仍然非常不严谨。他们常犯的一个错误是把 $x^2$ 这样的东西叫做“函数”(function)。其实 $x^2$ 不是一个函数,它只是一个表达式。你必须同时指明“$x$ 是参数”,加上 $x^2$,才会成为一个函数。所以正确的函数写法其实看起来像这样:$f(x) = x^2$。或者如果你不想给它一个名字,可以借用 lambda calculus 的写法,写成: $λx.x^2$。

建议:

  • 可以参考C语言,引入头文件。按照标准的学科分类把符号进行分层分级,整合成为一系列标准符号库,然后像C一样在论文或者学术文章里进行引用。
  • 可以参考C++语言,引入namespace。
  • 必须确保符号一致性,比如右上角的角标如果是实数那就只代表幂次,这个具体在头文件里定义。

无论怎样,这都不是一蹴而就的事情,因为习惯很难改变,而这件事又没有显著的短期利益。可能随着符号体系越来越臃肿,直到人们受不了了才开始思考改变。

从根本上说,数学和计算机科学的融合是未来的趋势,符号体系的改进是迟早的事。