ExpressionTree[expr]
从表达式 expr 的结构中给出 Tree 对象.
ExpressionTree[expr,struct]
从表达式 expr 中给出一个 Tree 对象,其数据和子树由 struct 指定.
ExpressionTree
ExpressionTree[expr]
从表达式 expr 的结构中给出 Tree 对象.
ExpressionTree[expr,struct]
从表达式 expr 中给出一个 Tree 对象,其数据和子树由 struct 指定.
更多信息和选项
- ExpressionTree 可以根据指定的列表、数组、规则、XML 和任意表达式构造 Tree 对象.
- 任意表达式的 struct 的可能形式包括: »
-
"HeadTrees" 按层级排序的对应于表达式的子表达式的头部的树图 "Heads" 按层级排序的表达式的子表达式的头部 "Subexpressions" 按层级排序的表达式的子表达式 "Atoms" -1 级处表达式的原子子表达式 Null 按层级排序的没有数据的表达式的子表达式 None 表达式自身 - ExpressionTree 的选项与 Tree 相同,并有以下更多选项:
-
Heads False 包括表达式的头部和其作为子树的部分 - 具有默认选项设置 HeadsFalse 的表达式 f[a,b][g[1,2],x] 的可能结构包括:
- 带有选项设置 HeadsTrue 的这些结构的版本包括: »
- 用于任意表达式的 struct 的保留形式包括:
-
"HeldHeadTrees" 按层级对应于表达式的子表达式的保留头部的树图 "HeldHeads" 按层级排序的保留表达式的子表达式的头部 "HeldSubexpressions" 以层排序的表达式的保留子表达式 "HeldAtoms" 在 -1 层处的表达式的保留原子子表达式 - 常见表达式类型的 struct 可能形式包括:
-
"XML" XML 对象的标签、属性和元素 - 用于嵌套列表和关联的 struct 的可能形式包括: »
-
"List" 嵌套列表的元素 "Association" 嵌套关联的元素 "Dataset" 数据集的标题和数据 - 嵌套规则 struct 的可能形式包括: »
-
"Rules" 嵌套规则的左侧和叶子 "JSON" JSON 对象的名称和值,使用名称作为数据 "RawJSON" JSON 对象的名称和值,使用名称作为键 "FileSystem" 文件系统中的目录和文件
范例
打开所有单元 关闭所有单元基本范例 (4)
ExpressionTree[f[a, b, c[p, q, r]]]ExpressionTree[f[a, b, c[p, q, r]], Heads -> True]ExpressionTree[f[a, b, c[p, q, r]], "Subexpressions", Heads -> True]ExpressionTree[XMLElement["tag", {"attr" -> "value"}, {"data", XMLElement["tag2", {}, {"data2"}]}], "XML"]ExpressionTree[Unevaluated[1 + 1], "HeldHeads"]ExpressionTree[<|a -> <|x -> 1, y -> 2|>, b -> <|x -> 3, y -> 4|>|>, "Association"]范围 (14)
任意表达式 (6)
"HeadTrees" (1)
如果 AtomQ[head] 给出 True,则 ExpressionTree[head[arg1,arg2,…],"HeadTrees"] 给出一棵树,其根包含 head,子节点由 ExpressionTree[argi,"HeadTrees"] 给出:
ExpressionTree[f[g[1, 2], x], "HeadTrees"]如果 AtomQ[head] 给出 False,则 ExpressionTree[head[arg1,arg2,…],"HeadTrees"] 给出一颗树图,其根包含 ExpressionTree[head,"HeadTrees"] 而非 head:
ExpressionTree[f[a, b][g[1, 2], x], "HeadTrees"]ExpressionTree[f[a, b][g[1, 2], x], "HeadTrees", Heads -> True]ExpressionTree[atom,"HeadTrees"] 给出一个包含原子表达式 atom 的叶子:
ExpressionTree[1, "HeadTrees"]"Heads" (1)
ExpressionTree[head[arg1,arg2,…],"Heads"] 给出根包含 head 且孩子由 ExpressionTree[argi,"Heads"] 给出的树结构:
ExpressionTree[f[a, b][g[1, 2], x], "Heads"]ExpressionTree[f[a, b][g[1, 2], x], "Heads", Heads -> True]ExpressionTree[atom,"Heads"] 给出一个包含原子表达式 atom 的叶子:
ExpressionTree[1, "Heads"]"Subexpressions" (1)
ExpressionTree[expr0[expr1,expr2,…],"Subexpressions"] 给出根包含 expr0[expr1,expr2,…] 且孩子由 ExpressionTree[expri,"Subexpressions"] 给出的树结构:
ExpressionTree[f[a, b][g[1, 2], x], "Subexpressions"]ExpressionTree[f[a, b][g[1, 2], x], "Subexpressions", Heads -> True]ExpressionTree[atom,"Subexpressions"] 给出一个包含原子表达式 atom 的叶子:
ExpressionTree[1, "Subexpressions"]"Atoms" (1)
ExpressionTree[expr0[expr1,expr2,…],"Atoms"] 给出由 ExpressionTree[expri,"Atoms"] 给出的具有子节点的树:
ExpressionTree[f[a, b][g[1, 2], x], "Atoms"]ExpressionTree[f[a, b][g[1, 2], x], "Atoms", Heads -> True]ExpressionTree[atom,"Atoms"] 给出一个包含原子表达式 atom 的叶子:
ExpressionTree[1, "Atoms"]Null (1)
ExpressionTree[expr0[expr1,expr2,…],Null] 给出由 ExpressionTree[expri,Null] 给出的具有子节点的树:
ExpressionTree[f[a, b][g[1, 2], x], Null]ExpressionTree[f[a, b][g[1, 2], x], Null, Heads -> True]ExpressionTree[atom,Null] 给出一个包含 Null 的叶子,表示原子表达式 atom:
ExpressionTree[1, Null]None (1)
ExpressionTree[expr,None] 给出一个包含 expr 的叶子:
ExpressionTree[f[a, b][g[1, 2], x], None]常用表达式 (1)
嵌套列表和关联 (3)
"Association" (1)
"Dataset" (1)
ExpressionTree[{
<|"a" -> 1, "b" -> "x", "c" -> {1}|>,
<|"a" -> 2, "b" -> "y", "c" -> {2, 3}|>,
<|"a" -> 3, "b" -> "z", "c" -> {3}|>,
<|"a" -> 4, "b" -> "x", "c" -> {4, 5}|>,
<|"a" -> 5, "b" -> "y", "c" -> {5, 6, 7}|>,
<|"a" -> 6, "b" -> "z", "c" -> {}|>}, "Dataset"]嵌套规则 (4)
"JSON" (1)
"RawJSON" (1)
选项 (11)
Heads (2)
使用默认选项设置 HeadsFalse,表达式的头不包含在任何层级中:
ExpressionTree[f[a, b][g[1, 2], x], Heads -> False]设置 HeadsTrue 时,会像表达式的其他元素一样包含头部:
ExpressionTree[f[a, b][g[1, 2], x], Heads -> True]ExpressionTree[f[a, b][g[1, 2], x], "Subexpressions", Heads -> False]ExpressionTree[f[a, b][g[1, 2], x], "Subexpressions", Heads -> True]为单个树图元素设置样式 (2)
ExpressionTree[a[b, c], TreeElementLabel -> "?"]ExpressionTree[1[2[5, 6, 7], 3[8, 9, 10], 4[11, 12, 13]],
TreeElementLabel -> {___, _ ? EvenQ} -> None, TreeElementStyle -> {___, _ ? OddQ} -> {LightRed, EdgeForm[{Red, Dashed}]}]为整颗树图设置样式 (4)
ExpressionTree[6[5[4[3, 2], 3[2, 1]], 4[3[2, 1], 2[1, 0]]], TreeElementLabel -> All -> None, TreeElementStyle -> All -> EdgeForm[Red]]ExpressionTree[6[5[4[3, 2], 3[2, 1]], 4[3[2, 1], 2[1, 0]]], BaseStyle -> LightRed]ExpressionTree[6[5[4[3, 2], 3[2, 1]], 4[3[2, 1], 2[1, 0]]], BaseStyle -> {Dashed, EdgeForm[{Dashing[{}], Thick}]}]ExpressionTree[6[5[4[3, 2], 3[2, 1]], 4[3[2, 1], 2[1, 0]]], BaseStyle -> {Red, EdgeForm[None]}, TreeElementStyle -> All -> Opacity[0]]树图布局和图形选项 (3)
ExpressionTree[1[2[4, 5], 3[6, 7]], TreeLayout -> Bottom]ExpressionTree[$CellContext`a[...], TreeLayout -> "BalloonEmbedding", IconizedObject[«labels»]]指定 Graphics 选项:
ExpressionTree[a[b, c], Background -> LightBlue, ImageSize -> 50]属性和关系 (15)
ExpressionTree[f[a, b, g[c, d], e]]TreeExpression[%]TreeExpression[[image]]ExpressionTree[%]ExpressionTree[Groupings[{1, 2, 3, 4}, f -> 2]]默认结构 "HeadTrees" 下,ExpressionTree 构建一个树结构,可用子树包含给出子表达式标头的树结构的数据:
ExpressionTree[f[g[1, 2], h][x, y[1, 2, 3]], "HeadTrees"]结构 "Heads" 给出一个树结构,与 "HeadTrees" 表示同样的数据,但数据包括子表达式标头自身:
ExpressionTree[f[g[1, 2], h][x, y[1, 2, 3]], "Heads"]ExpressionTree[expr,"Heads"] 给出类似于 TreeForm[expr] 的输出:
TreeForm[f[g[1, 2], h][x, y[1, 2, 3]]]结构 "Subexpressions" 给出了一棵树,其形状与 "Heads" 给出的形状相同,但数据包含子表达式本身而非其头部:
ExpressionTree[f[g[1, 2], h][x, y[1, 2, 3]], "Subexpressions"]在第 n 层的树的子树状结构对应第 n 层的除标头外的表达式的某些部分:
Level[f[g[1, 2], h][x, y[1, 2, 3]], {0}]Level[f[g[1, 2], h][x, y[1, 2, 3]], {1}]Level[f[g[1, 2], h][x, y[1, 2, 3]], {2}]ExpressionTree[f[g[1, 2], h][x, y[1, 2, 3]], "Subexpressions", Heads -> True]Level[f[g[1, 2], h][x, y[1, 2, 3]], {0}, Heads -> True]Level[f[g[1, 2], h][x, y[1, 2, 3]], {1}, Heads -> True]Level[f[g[1, 2], h][x, y[1, 2, 3]], {2}, Heads -> True]结构 "Atoms" 给出一个树状结构,该结构与 "Subexpressions" 给出的形状一样,但仅在叶子节点处储存数据:
ExpressionTree[f[g[1, 2], h][x, y[1, 2, 3]], "Atoms"]Null 结构给出一棵形状相同但没有数据的树:
ExpressionTree[f[g[1, 2], h][x, y[1, 2, 3]], Null]ExpressionTree[1[2[3, 4], 5[6, 7]], "Heads"]使用 TreeFold 在每一个子树上方插入父辈节点:
TreeFold[Tree[f, {Tree[##]}]&, %]TreeExpression[%, "Heads"]默认情况下,Map 映射在表达式中的参数上:
% === Map[f, 1[2[3, 4], 5[6, 7]], {0, -2}]ExpressionTree[1[2, 3][4[5, 6], 7[8, 9]], "Atoms", Heads -> True]使用 TreeFold 在每个子树前插入兄弟节点
TreeFold[Tree[{f, Tree[##]}]&, %]TreeExpression[%, "Atoms", Heads -> True]Map 在设置了 HeadsTrue 的表达式中映射子表达式:
% === Map[f, 1[2, 3][4[5, 6], 7[8, 9]], {0, -2}, Heads -> True]ExpressionTree[1[2[3, 4], 5[6, 7]], "Heads"]TreeMap 映射在树图中子树的数据上:
TreeMap[f, %, All]TreeExpression[%, "Heads"]Map 可直接映射在头部和叶片上:
mapAtData[f_][head_[args___]] := f[head][args]
mapAtData[f_][expr_] := f[expr]Map[mapAtData[f], 1[2[3, 4], 5[6, 7]], All]ExpressionTree[1[2, 3][4[5, 6], 7[8, 9]], "Atoms", Heads -> True]TreeMap 可以仅映射树中叶子的数据:
TreeMap[f, %, {-1}]TreeExpression[%, "Atoms", Heads -> True]Map 可直接映射于表达式中的原子上:
% === Map[f, 1[2, 3][4[5, 6], 7[8, 9]], {-1}, Heads -> True]Depth[expr] 等价于 TreeDepth[ExpressionTree[expr]]+1:
ExpressionTree[f[g[h]][a, b, c]]TreeDepth[%] + 1Depth[f[g[h]][a, b, c]]Depth[expr,HeadsTrue] 等价于 TreeDepth[ExpressionTree[expr,"Subexpressions"]]+1:
ExpressionTree[f[g[h]][a, b, c], Heads -> True]TreeDepth[%] + 1Depth[f[g[h]][a, b, c], Heads -> True]ExpressionTree 在构建树状结构之前计算子表达式:
ExpressionTree[Today + Quantity[1, "Days"], "Subexpressions"]使用 Unevaluated 可以将子表达式的计算推迟到树状结构建立以后进行:
ExpressionTree[Unevaluated[Today + Quantity[1, "Days"]], "Subexpressions"]保留结构保证子表达式封装在 HoldForm 中,这样可以阻止所有计算:
ExpressionTree[Unevaluated[Today + Quantity[1, "Days"]], "HeldSubexpressions"]显示 HoldForm 封装:
InputForm[%]ExpressionTree[Inactivate[Unevaluated[1 + 2 * 3]], "Heads"]文本
Wolfram Research (2021),ExpressionTree,Wolfram 语言函数,https://reference.wolfram.com/language/ref/ExpressionTree.html (更新于 2022 年).
CMS
Wolfram 语言. 2021. "ExpressionTree." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2022. https://reference.wolfram.com/language/ref/ExpressionTree.html.
APA
Wolfram 语言. (2021). ExpressionTree. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/ExpressionTree.html 年
BibTeX
@misc{reference.wolfram_2026_expressiontree, author="Wolfram Research", title="{ExpressionTree}", year="2022", howpublished="\url{https://reference.wolfram.com/language/ref/ExpressionTree.html}", note=[Accessed: 07-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_expressiontree, organization={Wolfram Research}, title={ExpressionTree}, year={2022}, url={https://reference.wolfram.com/language/ref/ExpressionTree.html}, note=[Accessed: 07-September-2026]}