Mathematica 的语言怎么样?
8 个回答
没想到我的这个提问已经快要一年了,现在我来自己回答下。
我本人在入门 Mathematica 的时候没有多少关于其它语言的经验,仅仅是自学过一点点python,然后在学校接触了C(水平大概在求1+2+.......+99+100的程度),这应该是值得庆幸的地方,因为许多习惯于传统语言(主要是过程式)的人在使用Mathematica时都会非常的不适应。这一年来我一直都在玩 Mathematica ,水平可能仍停留在入门阶段但是对这个呆萌的系统的认识肯定比一年前要多一些。现在我把回答的重点集中在这门语言的独特之处。
翻开任何一本国内的Mathematica书籍,行文过程大概都是这样的:怎么在笔记本里输入并运行表达式;介绍基本的数学函数;教你怎么画图;过程控制语句(For,While,If等)。不得不吐槽过程控制语句这一部分,对Mathematica稍有了解的朋友都知道,在Mathematica里大量的使用过程式语句是非常不自然且不高效的一种做法,其他语言(比如C)中大量使用的For循环在Mathematica中丑陋而低效。
其实,Mathematica支持很多的编程范式(有可能是最多的),其中最为高效的应该就是函数式了,熟悉一点函数式语言的人再来接触Mathematica可能会倍感亲切。通过纯函数(相当于Lambda演算)、高阶函数(Nest、Fold、Map、Apply等等)等各种函数式编程的技巧,你可以轻易写出简洁到爆的程序,而且绝大部分情况下都比过程式版本高效得多。
但是,这就是全部吗?Mathematica就是一个顺带支持其它编程范式的函数式语言吗?
其实,Mathematica是一个基于规则和模式的重写系统。藏在各种炫目功能和编程形式背后的是一个精心设计的规则替换和模式匹配引擎。Mathematica中的函数是规则,变量也是规则,甚至可以说在Mathematica里变量和函数根本没有本质区别因为它们都是被附加了规则的符号而已。这在其它语言中是很难想象的事情,也正式因为这一点,很多在传统语言中难以做到的事在Mathematica都能实现。比如:在运行过程中修改函数的定义。
经过巧妙的伪装,这个重写系统能模拟出函数式风格,而且模拟地很好,rule-based编程自然也是水到渠成,过程式风格也能刚好凑合,这不能不说是很特别!
大家已经说了一些,我来说说我的感受。
首先,用 Mathematica 编程,非常非常短。当然,这一方面仰赖 Mathematica 的巨量的函数,另一方面,也有它编程范式的功劳。
从官方网站的数据,Mathematica 编程的字母数,明显少于 C 和 Python,他们甚至做了这样的图来表示:


大概如何描述呢?1000 行的 Python 代码,在 Mathematica 下,大约只需要 110 行即可表述出来,对上之数据进行拟合,可以看到,他们的关系大约是:
L_{Mathematica}=3.48 \sqrt{L_{Python}}

同样的,对于 C 、C++ 、Java 、Matlab,它增长的速度依然低于这些语言。(系数分别是:C++ -> 2.85, C -> 2.36, Java -> 3.53, MATLAB -> 4.16)

如果与各个语言对比,Mathematica 几乎比所有都要简洁:

图像代表了左边的语言形式,写成右边的形式,行数的倍数。
以上部分翻译自
How the Wolfram Language Measures Up