常用记号和表示惯例
函数名
函数变量
内置函数所作用的主表达式或对象经常作为函数的第一个变量. 辅助参数作为接下来的变量出现.
选项
一些内置函数可以采用选项(options). 每个选项具有一个名称,可以表示为一个符号,或者在一些情况下可以表示为一个字符串. 通过给出形如
或者
的规则,设置选项. 这样的规则必须出现在函数的其它变量之后. 可以按任何顺序给出不同选项的规则. 如果用户不能对特定选项明确地给出规则,则使用该选项的默认设置.
| Options[f] | 给出所有与 f 相关联的选项的默认值 |
| Options[expr] | 给出在特定表达式中设置的选项 |
| Options[expr,name] | 给出表达式中选项 name 的设置 |
| AbsoluteOptions[expr,name] | 给出 name 的绝对设置,即使实际设置为 Automatic |
| SetOptions[f,name->value,...] | 对与 f 相关联的选项设置默认规则 |
| CurrentValue[name] | 给出前端选项 name 的选项设置;可以在赋值操作的左端使用来设置选项 |
元素编号
序列规格
序列规格
对应于元素 m、
、
、...,直至不大于 n 的最大元素.
序列规格在函数 Drop、Ordering、StringDrop、StringTake、Take 和 Thread 中使用.
层规格
在表达式中,对应于非负整数 n 的层被定义为由 n 个索引指定的部分组成. 一个负的层数 -n 表示深度为 n 的表达式的所有部分. 表达式的深度,Depth[expr],是用来指明任意部分的索引的最大值,再加1. 除非设置选项 Heads->True,否则层的计数不包括表达式的头部. 层
是整个表达式. 层
包含所有没有子部分的符号和其它对象.
由
指定的层的范围包括所有树中的既不在层
之上,也不在层
之下的部分.
不必具有相同的符号. 因此,例如,
指明了表达式树中出现在最高层以下,但叶子层以上的子表达式.
函数如 Apply、Cases、Count、FreeQ、Level、Map、MapIndexed、Position、Replace 和 Scan 使用层规格. 然而,注意,对于所有这些函数,默认层规格并不相同.
迭代器
| {imax} | 迭代 |
| {i,imax} | i 从 1 到 |
| {i,imin,imax} | i 从 |
| {i,imin,imax,di} | i 从 |
| {i,list} | i 采取 list 中的连续值 |
| {i,imin,imax},{j,jmin,jmax},... | i 从 |
迭代器在函数如 Sum、Table、Do 和 Range 中使用.
迭代参数
和 di 不必是整数. 变量 i 被赋于一系列值,这些值从
开始,以步长 di 递增,当 i 的下一个值比
大时停止. 迭代参数可以是任意的符号表达式,只要
是一个数.
当使用一些迭代变量时,后面的迭代变量的极限可以依赖于前面的迭代变量的值.
变量
可以是任意符号表达式;它不必是单个字符.
的值自动设为迭代函数的局部值. 这可以通过对迭代函数中包含
的 Block 结构进行封装来实现.
关于计算迭代函数的过程,请参见 "计算".
作用域结构
| Function[{x,...},body] | 局部参数 |
| lhs->rhs 和 lhs:>rhs | 局部模式名 |
| lhs=rhs 和 lhs:=rhs | 局部模式名 |
| With[{x=x0,...},body] | 局部常数 |
| Module[{x,...},body] | 局部变量 |
| Block[{x,...},body] | 全局变量的局部值 |
| DynamicModule[{x,...},body] | 在 Dynamic 接口中的局部变量 |
Mathematica 中的作用域结构. 语法上第一组作用域变量上的函数.
一些作用域在语法范围内缩小作用域,这意味着特定变量或模式的字母实例被合适的值替代. 当要求局部变量名时,名称形如 xxx 的符号被重命名为
. 当计算嵌套作用域结构时,在内层作用域结构中自动产生新的符号,以避免与外层作用域结构的符号冲突.
当采用一个变换规则或定义的时候,ReplaceAll(
)实际上用来代替出现在右边的模式名. 然而,当必要的时候,将产生新符号用来表示在右边出现的作用域结构的其它对象.
每次计算的时候,Module 产生形如
具有唯一名称的符号,用来替代所有在函数体中出现的局部变量.
Block 局部化全局变量的值. 即使当变量没有在函数体内明确出现时,在依赖全局变量的函数块中进行的任何计算都将使用在局部指定的值. Block 体可能也会对全局变量进行修改,但是任何修改都只持续到 Block 结束执行的时候.
在一个笔记本中,DynamicModule 对 DynamicModule 输出的每个实例局部化它的变量. 这意味着每个使用复制和粘贴创建的 DynamicModule 输出的每个拷贝都将使用它自己的局部变量.
表达式的顺序
表达式的正则排序自动使用属性 Orderless,并且在函数如 Sort 中符合以下规则:
数学函数
Mathematica 内置的数学函数如 Log[x] 和 BesselJ[n, x] 具有大量共同的特点.
- 它们具有属性 Listable,因此它们自动逐项作用于任何作为变量出现的列表.
- 它们具有属性 NumericFunction,因此当它们的变量是数值的时候,假定它们给出数值值.
数学常数
Mathematica 内置的数学常数如 E 和 Pi 具有下面特性:
- 在 NumericQ 中和其它地方作为数值量处理.
- 它们具有属性 Constant,因此在导数中作为常数处理.
保护
Mathematica 允许用户进行赋值,来重载 Mathematica 内置对象的标准操作和含意.
为了尽量避免出现错误的赋值,大多数 Mathematica 内置对象具有属性 Protected. 如果用户想要对一个内置对象进行赋值,必须首先删除该属性. 可以调用函数 Unprotect 来实现该功能.
存在一些基本的 Mathematica 对象,用户绝对不可以自己对其赋值. 这些对象具有属性 Locked,以及Protected. Locked 属性防止用户对任何属性进行修改,并且也防止删除 Protected 属性.
缩写的字符串模式
函数如 StringMatchQ、Names 和 Remove 允许用户给出缩写的字符串模式(abbreviated string patterns),以及由 StringExpression 指定的完全字符串模式. 缩写的字符串模式可以包含某些元字符(metacharacters),元字符可以表示普通字符组成的序列.
