Mathematica? 这厮不是Lisp家那痞子吗!

Mathematica?

这厮不是Lisp家那痞子吗!

最初是在数模课上介绍符号运算时知道Mathematica的。那时我还不知道她是Lisp家的小崽子,只是很好奇她是怎么做公式化简的。据说她有一个求解引擎和一麻袋变换规则,求解引擎不断地尝试各种规则,直到结构不变为止。除此之外,我对Mathematica并没多大兴趣,因为听人说Matlab才是业界的首选。现在看来,他俩之间的差别就如同C和Lisp。

后来在抽象代数课上,毛老大把群和面向对象做了一番类比。我突然想,有没有一门基于序对的编程语言呢?(后面当然不了了之了)后来发现,那不就是Lisp吗?!但这也是很久以后了,因为虽然很早就知道Lisp,但一直被灌输这样的观点:

Lisp是为人工智能而生的;

它是用链表搭建的,你看他的名字就叫“链表处理”(LISt Processor);

因为链表很适合做符号处理。

MD,链表怎么适合做符号处理了(参看徐宥的《LISP 语言是怎么来的–LISP 和 AI 的青梅竹马 A B》)?Lisp哪是用链表搭建的了?Lisp的“Lis”是代表的“list”,是序列,不是列表,更不是链表好不!序列和链表,一个数学概念,一个物理实现,两者天差地别好不!

而那时,我对Mathematica的印象非常不好:一门由函数堆起来的铜臭语言。直到我在Project Euler上看到那些精妙的Mathematica解法(之前我觉得最顺手的是Ruby),然后亲自实践,这才感受到他的气场。她就好像百依百顺的贤妻良母,不会像Ms. C那样稍有不顺就雷霆大怒,搅得你肝儿疼。

按理说,Lisp家出来的应该都是一身素颜,不做过多的粉饰(语法糖,Common Lisp那货除外)。但Mathematica不同,打扮得流里流气的,光调用函数就有四种写法:

形  式 示  例
标准形式 foo[x, y]
前缀形式 foo@x
中缀形式 x~foo~y
后缀形式 x//foo

Note

前缀和后缀形式好像都只能带一个参数。前缀形式还好,若想带多个参数,可以用Apply:Apply[f, {x, y}] 等价于f@@{x, y},即f[x, y]。后缀好像就没办法了。

这还不说她那上万号小弟(内置函数,具体多少我还真没查到,不过据说一万页写不完),数据结构也不下十种(List({...}), String("..."), Integer, Rational, Real, Array, Table, Tensors, Vectors, Matrices, ……还不算那些专业领域的。好吧,其实也就List, Number, String三种。可能吧。但翻开Mathematica的各色书籍,很难找到专门一章讲数据结构的,原因就是其实她只有序列这一种数据结构。)。可这只是她另类的外表,其实她有颗Lisbeth(龙纹身那女孩)的心。

外人可能盛赞Mac OS的华丽,但真正吸引果粉的却是它的表里如一。套用赞美Nobel那句话,Mac OS是所有带命令行的图形终端里最华丽的,也是所有图形界面里命令行支持最完整的。这就是使用Mathematica的感觉。她所有的一切都会被转换成一种统一的格式——表达式(expressions)。你可以用FullForm()来查看:

表达式 内部格式
x+y+z Plus[x,y,z]
xyz Times[x,y,z]
x^n Power[x,n]
{a,b,c} List[a,b,c]
a->b Rule[a,b]
a=b Set[a,b]

虽说它名字叫表达式,但其实不就是S-表达式(symbolic expression)么。你看,这可是Mathematica老东家自己写的The Meaning of Expressions

同一,这可能就是Mathematica强大的原因。说到同一,就不得不说说函数式编程的一大特征:函数与其他数据类型一样平等,即俗称的函数是一等公民。比如,我可以函数赋值给一个变量:

s = Sin

然后就可以通过变量s来实际调用Sin()。
我甚至可以像字符串那样摆弄函数名:

In[1]   :=  h[x + h[y]] /. h[u_] -> u^2
Out[1] :=   (x + h[y])^2

Note

expr/.lhs->rhs 的意思是将lhs->rhs 这条规则应用到expr上。

(未完待续)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容