Mathematica 9 is now available

2.6.4 高级专题:纯函数和规则中的变量

ModuleWith 可以给出作为局部处理的符号名序列. 但有时需要直接将某些变量 名进行局部处理. 例如,在使用 Function[{x}, x + a] 等纯函数时, x 是一个形式参数,这个名称是局部的. 在规则 f[x_] -> x^2 或 定义 f[x_] := x^2 中出现的 x 也是这样.
Mathematica 用统一的方法去保证在纯函数和规则中出现的形式参数是局部的, 且不与全局变量混淆. 其基本的思想是必要时用形如 的符号去代替 形式参数,作为一个约定, 从不用作全局变量名.

这里是一个纯函数的嵌套

Mathematica 重新命名函数内的形式参数 y 以免与全局变量冲突

这样得到的纯函数与所期望的一样

一般来说,在 Function[vars, body] 中的形式参数当另一个纯函数修改了  时就要重新命名.

由于纯函数内发生了变化,形式参数就被重新命名

当函数内部没有变化时,形式参数就不重新命名

Mathematica 在对纯函数中的形式参数重命名时比较自由. 原则上,函数中的形式参数 与代换到纯函数中表达式的项不冲突时可以不用重新命名. 但为了一致起见在这种情况下 Mathematica 还是对形式参数重新命名.

这时在函数内的形式参数 x 屏蔽了函数体,故不需要进行重命名

这里是三重函数嵌套

这种情况下两个内层函数都重新命名

正如前文所述, Mathematica 中纯函数类似于形式逻辑中的 Lambda 表达式, 对形式参数重新命名使 Mathematica 纯函数再次产生标准 Lambda 表达式的所有语法.

Mathematica 中的定界结构

Mathematica 中有一些定界结构, 其中某些名称作为局部量处理, 当这些结构混合时,Mathematica 进行适当的重命名以避免冲突.

Mathematica 重新命名纯函数中的形式参数以避免冲突

这里 With 内的局部参数被重新命名以避免冲突

这种情况下变量名之间没有冲突,故没有进行重新命名

在模块中局部变量 y 重新命名以避免冲突

执行模块时,局部变量又一 次重新进行命名,以使得名称唯一

Mathematica 将变换规则当定界结构处理,其中模式的名称是局部的. 可以用 等建立命名的模式.

h 中的 xx_ 相同,在规则 中作为局部量

f[x_] -> x + y 等规则右端出现的 x 与名为 x_ 的模式匹配.于是,x 被当作规则的局部量处理,不能用其它定界结构去修改. 另一方面,y 在规则中不是局部量,可以用其它定界结构去修改. 当这种情况发生时,Mathematica 重新对规则中的模式命名以防止冲突.

Mathematica 对规则中的 x 重新命名以防止冲突

在一个定界结构中使用 With 时,Mathematica 就自动 地进行适当的重新命名. 但有时需要在定界结构中进行代换以免重命名, 这可以用 /. 运算实现.

当用 With 代替 y 时,纯函数中 x 被重新命名以防止冲突

当使用 /. 而不是 With 时,没有进行这类重新命名

当使用规则 f[x_] -> rhs 或定义 f[x_] := rhs 时, Mathematica 必须间接地替换出现在 rhs 中的 x,它用 /. 运算有效地完成此项工作. 于是,这些替换不遵循定界结构. 然而,当定界结构的内部由替换 修改后时,在定界结构中的其它变量被重新命名.

这里定义了一个产生纯函数的函数

xx^2 通过使用 /. 运算被简洁地插入纯函数之中

这里定义产生一对嵌套函数的函数

此时,纯函数外的 x 被重新命名



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.