lhs=rhs
计算 rhs 并把结果赋给 lhs. lhs 将总是被 rhs 替换.
{l1,l2,…}={r1,r2,…}
计算 ri,并将结果赋给对应的 li.
Set 
lhs=rhs
计算 rhs 并把结果赋给 lhs. lhs 将总是被 rhs 替换.
{l1,l2,…}={r1,r2,…}
计算 ri,并将结果赋给对应的 li.
更多信息
- lhs 可以是任何表达式,包括一个模式.
- f[x_]=x^2 是一个模式的典型赋值. 注意,_ 出现在左边,而不是右边.
- 形如 f[args]=rhs 的赋值建立与符号 f 相联系的变换法则上.
- 与一个特定符号相联系的不同规则通常按给出的顺序放置. 如果给出的一个新规则确实比存在的规则更具体,它当然放在它们之前. 这些规则在被使用时将按顺序被检测. »
- 具有相等 lhs 的新赋值将屏蔽旧的赋值. »
- 您可以用 ?f 或 Definition[f] 查看与符号 f 相关的所有赋值.
- 如果要对具有像 Flat 和 Orderless 属性的函数赋值,你必须在赋值之前确保要设置这些属性.
- Set 具有属性 HoldFirst.
- 如果 lhs 具有 f[args] 形式,则计算 args. »
- 对某些函数赋予 s[f[args]] 时,该赋值将自动与 f 相联系,而不是 s. 这些函数包括:Attributes、Default、Format、MessageName、Messages、N 和 Options. »
- 当它出现在一个未计算的符号形式中时,Set 被视为一个范围结构,以使得嵌套出现的变量在必要时被重命名. »
- lhs=rhs 返回 rhs,即使因为某些原因该指定的赋值不能执行.
- 某些类似 $RecursionLimit 的全局变量只能被赋予特定的范围或值的类型.
背景
- Set 是一个函数,对表达式求值并将结果作为变量的值. 表达式
通常用简化语法表示成
的形式. 在 Set 被求值后,当 lhs 出现时会被替换成 rhs. 根据 lhs 的形式,结果会被存储为与其关联的 OwnValues、DownValues 或特殊的数据结构. - Set 通常在左侧 lhs 包含模式,用于被赋值为右侧 rhs 指定的转换后的值,例如,
.
会对 rhs 立刻进行求值,这样在需要 rhs 只在应用规则后才被求值的场合,应该用 SetDelayed(简写为 :=)代替. - 查看给定符号关联的赋值可以用 Definition[f]. 可以用 Unset 把单独的赋值从符号中移除;Clear 和 ClearAll 可以一次性移除全部的定义.
范例
打开所有单元 关闭所有单元基本范例 (2)
范围 (15)
左侧: (7)
i = 1;
While[Prime[i] < 100, i = i + 1];ia[1] = x;a[2] = y;{a[1], a[2], a[3]}Expand[(1 + x) ^ 3]f[x_] = %f[a + b]用 Block 临时设置变量:
Block[{$RecursionLimit = 20}, x = x + 1]v = {a, b, c, d}v[[2]] = xvv = 1 + x ^ 5v[[2, 2]] = 77777vmat = (| | | |
| - | - | - |
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |);mat[[2]] = mat[[2]] + 10;
MatrixForm[mat]mat[[All, 3]] = {100, 101, 102};
MatrixForm[mat]不同类型的值: (8)
x = 7;OwnValues[x]a[1] = 17;DownValues[a]derivative[1][f] = fg;SubValues[derivative]sq/:area[sq] = s ^ 2;UpValues[sq]Default[f] = 0;Options[f] = {opt1 -> def1, opt2 -> def2};DefaultValues[f]N[const] = Product[1 - 2 ^ -i, {i, 2, 10}];NValues[const]N[const]Format[a] = α;FormatValues[a]a与
相关的 Attributes 的定义,而不是 Attributes:
Attributes[f] = HoldAllDefinition[f]推广和延伸 (5)
x = y = 77{x, y}{x, y} = {a, b}{x, y} = {y, x}{x, y}v = SparseArray[{1 -> 1, 4 -> 4}]v[[2]] = 3{v, Normal[v]}{time, res} = Timing[N[Catalan, 100000]];{time, N[res]}_a = αDefinition[a]{a, a[1]}应用 (6)
{a, b} = {27, 6};
While[b ≠ 0, {a, b} = {b, Mod[a, b]}];
ax = 1.0;
While[Cos[x] ≠ x, x = Cos[x]];
xx = 1.0;
Do[x = (x + 2 / x) / 2, {5}];
xx = (a + b)^2;1 + x + 1 / xupperTriangularLinearSolve[ U_, v_ ] :=
Module[ {x, m, n},
{m, n} = Dimensions[U]; x = Range[n];
Do[x[[i]] = (v[[i]] - Subsuperscript[∑, j = i + 1, n]U[[i, j]] x[[j]]) / U[[i, i]], {i, n, 1, -1}];
x
]upperTriangularLinearSolve[{{1, 2}, {0, 3}}, {1, 2} ]upperTriangularLinearSolve[ U_, v_ ] :=
Module[ {x, m, n},
{m, n} = Dimensions[U]; x = Range[n];
Do[x[[i]] = (v[[i]] - U[[i, i + 1 ;; n]].x[[i + 1 ;; n]]) / U[[i, i]], {i, n, 1, -1}];
x
];upperTriangularLinearSolve[{{1, 2}, {0, 3}}, {1, 2} ]属性和关系 (9)
x = RandomReal[];{x, x, x}y := RandomReal[];{y, y, y}x = 5;f[x] = 17Definition[f]a = 5;a = 6;afact[1] = 1;
fact[n_] := n fact[n - 1]
fact[10]fact[n_] := n fact[n - 1];
fact[1] = 1;
Definition[fact]fact[10]makedef[z_] := (f[x_] = z ^ 2;)
makedef[x]Definition[f]f[5]Module 引入新的符号,这与全局符号不同:
x = 5;
Module[{x}, x = 17;x]xa = Sqrt[2]Definition 显示与符号关联的定义:
Definition[a]Information 输出关于符号的变量信息,包括任何定义:
? aOwnValues 返回与定义的任何下值 (downvalue) 对应的规则列表:
OwnValues[a]fact[1] = 1;
fact[n_] := n fact[n - 1]用 Unset (=.) 清除具有特定左侧的定义:
fact[1]=.Definition[fact]Clear[fact]Definition[fact]可能存在的问题 (4)
x = 5;使用非延迟赋值意味着在执行 Set 之前会先计算右侧的表达式:
f[x_] = x ^ 2;f[2]g[x_] := x ^ 2g[2]x = x + 1y = 5;
y = y + 1wrong[x_] := (x = x ^ 2)
wrong[5]right[x0_] := Module[{x}, x = x0 ^ 2]
right[5]a/:Subscript[a, 1] = 5;
FullForm[UpValues[a]]a[1] = 6;
FullForm[DownValues[a]]巧妙范例 (1)
计算两个数的算术-几何均值 [更多信息]:
{x, y} = N[{1, 2}, 20];
While[x ≠ y, {x, y} = {(x + y/2), Sqrt[x y]}];x技术笔记
-
▪
- 符号的值 ▪
- 定义带标号的对象 ▪
- 立即定义和延时定义 ▪
- 纯函数和规则中的变量
历史
1988年引入 (1.0)
文本
Wolfram Research (1988),Set,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Set.html.
CMS
Wolfram 语言. 1988. "Set." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/Set.html.
APA
Wolfram 语言. (1988). Set. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/Set.html 年
BibTeX
@misc{reference.wolfram_2026_set, author="Wolfram Research", title="{Set}", year="1988", howpublished="\url{https://reference.wolfram.com/language/ref/Set.html}", note=[Accessed: 07-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_set, organization={Wolfram Research}, title={Set}, year={1988}, url={https://reference.wolfram.com/language/ref/Set.html}, note=[Accessed: 07-November-2026]}