模块和局部变量
Mathematica 一般假设变量是全局 变量. 即每次使用
等名字时,Mathematica 总认为在调用同一对象.
然而在编程时,不需要将所有变量都作为全局变量. 例如,在两个不同的程序中,
可用来指代两个不同的变量. 此时,每个程序中的
都必须作为局部 变量.
在 Mathematica 中可以用 modules 定义局部变量. 在每个模块中,可以给出模块中涉及的局部变量列表.
| Module[{x,y,...},body] | 具有局部变量 x,y, ... 的模块 |
在 Mathematica 中产生模块
定义全局变量

,其值为17.
| Out[1]= |  |
这里

在模块内,所以它的处理与全局变量

无关.
全局变量

的值还是17.
| Out[3]= |  |
模块的最常用方法是在自定义函数中建立临时或中间变量. 一定要保证这些变量只是局部的,否则当这些变量名与其它变量名重合成就会引起麻烦.
中间变量

是模块中的局部变量.
运行函数

.
| Out[5]= |  |
全局变量

的值还是17.
| Out[6]= |  |
在模块中可以像处理其它符号一样处理局部变量. 例如,可以把它们作为局部函数的名字来用,可以对它们赋于属性,等等.
这里构造了一个建立局部函数

的模块.
此处局部函数

是一般的阶乘.
| Out[8]= |  |
这里,

是一个推广了的阶乘.
| Out[9]= |  |
在一个模块中定义局部变量时,Mathematica 开始并不对它赋值. 即使在模块外定义了该变量的全局值,都能以纯符号的方式使用该变量.
这里使用了

在前面定义的全局值,故结果是一个数.
| Out[10]= |  |
| Out[11]= |  |
由于局部变量

没有赋值,因此被当作符号处理,
Expand 产生了一个预期的代数结果.
| Out[12]= |  |
| Module[{x=x0,y=y0,...},body] | 局部变量有初始值的模块 |
对局部变量赋初值
这里指局部变量

的初始值为

.
这里使用了

的定义.
| Out[14]= |  |
对模块中任何一个局部变量都可以定义初始值. 这些初始值总是在模块执行之前进行计算. 结果,即使定义了
是模块的局部变量,在赋初始值时可以用全局变量
的值.

的初始值为全局变量

的值.
| Out[15]= |  |
| lhs:=Module[vars,rhs/;cond] | 在 rhs 和 cond 中共用局部变量 |
在条件定义中使用局部变量
在定义
时经常需要引入临时变量,并且定义的右端也需要使用这些临时变量. Mathematica 允许将定义的右端和条件包含在模块之中.
Mathematica 在条件和右端项中共用局部变量

的值.
| Out[17]= |  |