Mathematica 新版10.3.0试水

Mathematica_Banner
Standard

博客好久没写东西了也该来拔拔草了。今天想在机房新机器上装个Mathematica,于是看到了最新版已经到10.3.0了(我之前用的只是10.0.1而已),就心血来潮下了一个玩玩。打开界面时并没有感觉到什么神奇之处,然而在输入的瞬间被吓尿了,它大概是长这个样子的:

KeywordChineseHint

新版(10.2.0 起)增加了语法关键词的中文解释

妈妈再也不用担心我看不懂英文了!看完中文名称,基本上对这个函数就有个大概的了解了。

然而更加精彩的还在后面,当我输完一行代码的时候,它就变成了这样:

ExprChineseHint

关键词自动注解

咦?关键词下面竟然还有代码说明,好神奇啊!这样子一来,根本不需要向别人解释这段代码什么意思了,能看得懂中文的应该都能懂了。简直是文科妹子要学编程的福音啊 (✿◕‿◕✿)

然而转念一想,这件事好像并不那么的单纯。在编程界,有一条广为人知的“定律”:1. 每个写代码的都希望别人的代码有注释,2. 然而他自己写代码的时候又不想写注释。此定律在江湖传播甚九,数十年未有人破。而今日Mma发现此中玄机,搞出这样一个自动代码注解,若放任其行,编程界势必大乱啊!

调侃完了,说些正经事。这东西有多大帮助我并不好说,但可以确定的是,对初学者的帮助是巨大的。Mma的文档系统本身就设计的比较亲民,学习曲线比较平缓,但依旧有好多人不知道要点F1(啧啧)。这次直接将解释放到了UI界面上,可见其对待新用户的认真程度了。

(不过这个东西可以干嘛用呢,或许可以用来写诗?开个脑洞下次来玩玩。)

回到原先的主题,下面便来简单介绍一下这次更新的内容以及个人的comment。


如果你是南大、东大学生,可以在紫荆的这个页面下载。边下边看,效率更高哦!

 

10.3.0 版本新增

官网的更新页面见此处

核心语言部分

  • 首先新增的是UpTo这个函数,名字和用法(见上)都比较显然。我想了一下,这可以解决某些“下标越界”的问题,当实际的输入比预期少时,不会报错,而且还可以简化语法。

 

  • 下一个是EqualTo函数,官方翻译是“等价判定”,还说这是从Equal(官方译为“恒等”)过来的,这两个词不管看名字还是解释都比较像,然而实际上是不一样的。后者是判断是否相等的运算符,而前者则是一个Currying函数,用来判断是否等于某个数,如EqualTo[2]就表示某个数是否等于2,返回TrueFalse(下面会细讲)

 

  • 后面还有一些GreaterThanLessThan等函数,其实都是类似的意思。实际上,如果你熟悉Mma的语法的话,应该能发现GreaterThan[x]就等价于#>x&,后者是算子的简写形式。然而为什么要把一个已经有的东西单独拿出来重新起名呢?原因比较简单,后面那串东西很难看懂。
ComparisonOfLambdaExpression

两种实际上等价的写法

在比较早期的时候,Mathematica的语法还没有那么复杂。有一些人喜欢One Liner,即用一行代码写出一个程序并引以为豪,这样的代码虽然不长,但特别难以看懂,因为充斥着诸如#@&//等等奇怪的符号。原因有二,一是这样子代码的确比较短,二是也没有其他办法表达这种概念,只能写成这样。

谁不想让自己写的代码的可读性提升呢?可能是出于这个想法,Mma自从9以来就更新了好多这样的包装函数,应当是出于代码可读性的角度考虑的吧。

 

  • 下面一个函数比较有意思,叫Echo,直译过来有“回声、共鸣、重复”的意思。在bash编程语言中,可以用来作输出,网络中好像也有本地回环的意思。而Mathematica大概也是延续了这个意思,这个函数也可以用作输出。不过我更喜欢把这个词翻译成“喊”,因为前面有个小喇叭 (●'◡'●)
Echo示例

对1~10的自然数进行扫描,如果是质数,则喊(Echo)出来

关于输出到屏幕,Mma中还有一个老牌函数叫做Print,也算是历史悠久了。它也能干输出的活,只不过前面缺了一个“小喇叭”。硬要说不同之处的话,Echo[expr]的返回值还是expr,而Print[expr]的返回值就是Null了。

 

  • 如果说Echo只是小打小闹的话,那么下面这个他的孪生兄弟EchoFunction威力可不一般。有了它,你就可以给“小喇叭”贴上标签,还可以在输出前打扮一番。想了好久,终于找到了一个比(mei) 较(you) 生(shu) 动(zi) 的例子来阐述这一点:

 

EchoFunction示例

Echo出一个对象的属性而不影响计算过程

 

简单解释一下,本身Today会返回一个时间对象,然而我还希望知道它的一些属性,比如星期几,就可以通过在Today上面作用一个函数来实现,而且这个函数作用还不会改变原表达式的值,可谓是一举两得。在调试的时候,这个特性应该很有用,从而代码可以写得很优雅。


 

知识表示部分

这一块体现了Wolfram的雄心壮志,要把整个世界变成可计算的。然而这些函数我并不常用,略过。


 

文本处理与可计算语义

这一部分有许多很神奇的函数,比如WordList这种能返回所有的词汇的。。

WordList

所有的英文名词

然而并不支持中文(=.=)想必Wolfram大概也尝试过,可能后来放弃了吧。

 

还有一些神奇的函数,可以做一些句法分析的。

TextStructure示例

句法结构分析

看到这个,再回想一下当初做的NLP作业,唉。。说多了都是泪啊。

 

当然这些函数本身也是比较好玩的,感兴趣的可以看看 蛋疼研究之单词等式 和 Mathematica破解字母频率密码

 

其他

再往下的新特性都是些奇奇怪怪的函数,就先扔一边去吧。本来想介绍新特性的,写着写着就停不下来了。最后再说一句,没有用过Mathematica的,赶紧装一个试试吧。最新版本只要2个G,你值得拥有!(~ ̄▽ ̄)~*

  • Nix Sherrington

    话说, 中文注释那两个特性 10.2.0 就有了.

    • 嗯,直接从10.0.1跳过来的不知道,多谢提醒~