2.6.7 块与模块的比较在进行 Mathematica 编程时,应当尽量使它的项相互独立,这样程序就容易理解、 维护和扩充.保证程序中不同项相互不影响的一个重要途径是给它的变量一定的范围. Mathematica 用模块和块这两种机理来限制变量的范围,在实际编程时, 模块远远比块常用,而在相互作用的计算中需要确定范围时,往往是块 比较方便. Mathematica变量的定界机理 在部分计算机语言使用与 Mathematica 模块类似的词汇定界 机理,一些像 LISP 等符号计算语言与 Mathematica 块类似的动态 定界机理. 在使用词汇定界时,变量在一个程序中的一个代码段被作为局部变量, 动态定界时,在程序执行历史的一部分被作为局部值.在C等编译语言中, 代码的执行历史之间的区分非常明显. Mathematica 的符号特性使得这个 区别不明显,其原因是代码在程序的执行过程中可以动态地生成. Module[vars, body] 的作用是在模块作为 Mathematica 的代码被 执行时处理表达式 body 的形式,当任何 vars 明显地出现在代码中时, 就被当作局部变量. Block[vars, body] 不注意表达式 body 的形式, 而是在 body 的全局计算过程中使用 vars 的局部值. 通过 i 来定义 m
Out[1]= |  |
在块内 i+m 的计算过程中,i 用了局部值
Out[2]= |  |
这里仅明显出现在 i+m 中的 i 被当作局部变量处理
Out[3]= |  |
|