立即赋值与延迟赋值
个人猜测,当x是一个变量的时候,这几种方法都是一致的。每次更新x的值,整个函数都会重新计算一次。如果前提是x=3,再去定义函数,那么前两种方法记录的都是8,只有第三种延迟赋值才会重新计算。以下是一些验证结果
- 当x是变量时,首先清楚x,然后定义三个表达式,从out中也可以看到三个表达式赋值的结果。然后令x=3后,重新计算三个表达式,他们都能正确的计算结果。
- 当x是常数时,直接赋值的结果就是10,间接赋值时保存的时一个等式。改变x大小,直接赋值的结果不会修改的,只有间接赋值的结果才会随着x的改变而变化。
所以为了保险起见,如果要定义一个函数,最好使用间接赋值定义。
列表
matlab采用方括号表述一组数组,Mathematica是用的是大括号{}表示,内部可以继续嵌套一个数组
元素提取可以采用Part函数,也可以采用“[["和"]]"符号进行提取,Matlab使用“:”表示一段范围,Mathematic采用“;;”,例如1;;3表示第一个到第三个元素,1;;-7表示第一个到倒数第7个,“2,3”表示第二个元素中的第三个
缺省的情况下,表示首个和末尾
匹配
类似于正则表达式一样,符号"_",读作blank,也是代表任意的意思
例如
其中Case过滤符合特征的函数,Replace函数和"/."是一个意思,只是有了两种表达方式,第二种看上去更加的简洁,Replace函数做了两部,首先寻找符合的函数,然后"->“表示符合要求的函数替换成其他方式
当然和正则表达式一样,匹配的规则还有许多,可以参考官方的教程,或者帮助文档。
函数定义
这是最常用的功能,官方教程提供的方法比我平时使用的方法更多。
变量为x,f为函数名称,冒号和等于的组合表示延迟赋值的意思,x+3是他表达形式。如果变量是两个甚至更多个,可以在添加更多变量名称,名称之间采用逗号分隔。
官方的文档还定义了几个取特殊值的方法,在这几个点取特定的值的意思
还可以在函数添加一些条件,Condition和符号“/;”是相同的意思,表示成立的条件。