Mathematica 9 is now available

2.4.8 立即定义和延时定义

Mathematica 中有两种赋值形式: lhs = rhslhs := rhs,其主要 区别是什么时候计算 rhs 的值. lhs = rhs 是立即赋值,即 rhs 是在赋值时立即计算, 而 lhs := rhs 则是延时赋值,即赋值时并不计算 rhs,而是在需要 lhs 的 值时才进行计算.

Mathematica 中的两种赋值形式

:= 定义 ex

由于使用了 :=,该定义中仍然保持没有计算之前的形式

使用 = 赋值时,右端立即被计算出来

现在保存的定义是 Expand 的结果

当执行 ex 时,就调用 Expand

iex 将它的变量替换到已展开的形式中去,给出不同形式的结果

由上面的例子看出 = 和 := 都可以用来定义函数,要特别注意它们的差异. 一个常用的原则 是:当一个表达式的值再不改变时用 = ,而通过赋值求表达式的一个值时用 := .在无法确定时用 := 总比用=好一些.

=:= 赋值的含意

尽管 := 比 = 用得多一些,但还有必须用 = 定义函数的一个重要情形. 当进行一个运算得到具有符号参数 x 的结果时,还需要进一步得到对应于不同 x 的结果,一种方式是用 /. 将适当的规则用于 x,通常用=去定义变量 x 的函数 就较方便一些.

涉及 x 的一个表达式

定义一个自变量可用 x 的值代入的值函数

x1+a 时的结果

上面例子中值得注意的一点是在模式 x_ 中出现的名称没有任何特殊之处,它仅是一个符号,与其它表达式中出现的 x 没有区别.

定义表达式值的函数

= 和 := 不仅用来定义函数,还用来给变量赋值, x = value 立即求 value 的值,并将其赋于 x,而 x := value 不立即求值,每次使用 x 时才计算其值.

求出一个伪随机数,赋给 r1

Random[ ] 先不计算,在每次使用 r2 时进行计算

此处给出 r1r2 的值

r1 的值维持不动,每次使用 r2 时就产生一个伪随机数

在一系列值语句中,要特别注意立即赋值和延时赋值的区别.

a=1

计算 a+2 得到 3,将结果赋于 ri

a+2 先不计算,等到 rd 使用时求其值

此处 rird 值相同

此时 a 的值被改变

现在 rd 使用 a 的新值,而 ri 保持不动

可以用延时赋值 t := rhs 来设置在不同环境下有不同值的变量, 当每次需要 t 的值时,就用与 rhs 有关变量的当前值来计算它的值.

延时赋值的右端暂不计算

a=4,再求出 t 的值

a=6,再计算 t

在上面的例子中,a是一个全局变量,它的值决定了 t的大小.当参数中大部分偶尔才变化时,用这种方式是方便的. 但必须认识到明显 的或隐含的变量之间的依赖关系是容易混淆的,应该尽可能地使用函数 明确地反映依赖关系.

Mathematica 中的两种变换规则

与立即或延时赋值类似,可以建立立即或延时的变换规则.

给出规则时其左端立即计算

这类规则不一定十分有用

规则的右端暂不计算,每次使用规则时才求它的值

使用规则时就进行展开

与赋值的情形类似,当用确定的值代替表达式的值时用 ->,而当给出 一个求值的命令时用 :>.



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.