Mathematica 函数右下标有无的区别

来源:互联网 发布:javascript面试 编辑:程序博客网 时间:2024/06/05 18:38

文章转载自


这里写图片描述
简单地说,如果只写f[x],那就只定义了f[x]的值。因为这里的x就是符号x。

但写f[x_]的话,这里的x_就不再是x这个符号本身,而是一个模式,它可以代表任何东西。

当然还可以给模式加一些条件。

这里写图片描述

Mathematica会自动给f的定义排序,特殊的排在前面,一般的排在后面。这样,计算f[某个东西]时,它会先看这个东西是不是x;如果是的话,那就等于1;如果不是的话,再看它是不是大于0:如果是的话,那就等于3;如果不是的话,就只剩下最一般的定义,那就是等于2。

这里写图片描述

这样就可以针对自变量的不同取值范围给出不同的定义。这样在定义一些分段函数或者递归定义的函数的时候就比较方便。比如说我们可以这样定义阶乘:

这里写图片描述

我们还可以用更复杂的模式。比如说可以规定自变量的形式。下面定义的这个函数可以把只有一个元素的列表中的那个元素取出来。

这里写图片描述

还可以用两道下划线代表列表中的连续几项,三道下划线代表列表中长度可以为0的连续几项。注意

这里写图片描述

这里f[{1}]没有找到符合的定义,于是原样返回。

于是快速排序在Mathematica中可以这样写:

这里写图片描述

有人抱怨Mathematica语言可读性不好。但在我看来,模式匹配是大大提高了可读性的。

0 0
原创粉丝点击