Skip to main content

Posts

Showing posts from February, 2014

杂谈:把 Mathematica 当做一种编程语言

在很大一部分 Mathematica 用户眼中, Mathematica 只不过是一个兼有符号操作和数值计算功能、用户界面良好的计算软件而已,由于中文资料的相对缺乏,这一点在中文用户中尤其严重。稍微挑选基本在互联网上可见的中文本土教程,比如张韵华、王新茂教授等人编著的 Mathematica 7 实用教程,徐安农所编写的 Mathematica 数学实验 等等,基本上从软件教学的层面编写的。从编程语言、计算机科学角度编写的中文资料,即使有,也是相当贫瘠的。  实际上,尽管 Mathematica 脱胎于 Stephen Wolfram 最早的 SMP 符号操作程序,但却是作为一种编程语言被设计的。Mathematica 的底层解释器大部分由 C 语言写成,此外一些极端要求速度的基础计算函数也由 C 语言支持, 而其他大量的实用函数以及包由则是由 Mathematica 编程语言来实现的。解释器和这些函数构成了所谓的 Mathematica Kernel。Mathematica 这个生态系统的另外一个重要组成部分是前端(Front End),大量美轮美奂的数学公式显示,图形绘制,文档排版功能都极大程度地依赖前端,而前端和 Kernel 之间通过 MathLink 进行交互。Front End 和 Kernel 被设计得相当独立,尽管并不普遍,但是Front End实际上是可以被当做独立的软件来使用的,用户可以在上面编辑文字公式,生成漂亮的文档、演示文稿,绘制图形等等。  个人感觉,学习 Mathematica 编程,至少有三点是一定需要了解的:“Everything is Expression” 的语言设计原则、“规则替换”的系统实现机理和“模式匹配”引擎的强大效用。 从设计上来说,Mathematica 遵循 “Everything is Expression” 的哲学,这种哲学可以大大简化解释器的设计,也可以产生“统一”的数学美感。关于这一点,有些读者可能会知道对于任何公式函数以及符号,当我们用 FullForm 这个函数作用于其上的, 就能求出该公式函数或符号的“完全形式”,而 FullForm 通常遵循这样的形式: head[arg1, arg2, ..., argn]. 这就是一个 Mathematica 表达式, 甚至对...

Mathematica 这门语言怎么样?

本人小白。学习Mathematica两个月。 我说的不是这个数学软件,而是此软件自带的编程语言,我觉得此语言表达能力异常强大,模式匹配等特性可以使代码写得非常短。但是此语言现在貌似仍然局限在Mathematica系统内部。 问:此语言和其他主流语言比起来优缺点在哪?以后Mathematica有没有可能跳出Wolfram的封闭体系得到更广泛的应用? ***************************************************************************************************************************************** 没想到我的这个提问已经快要一年了,现在我来自己回答下。 我本人在入门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就是一个顺带支持其它编程范式的函数式...