"ExprStruct" (数据结构)
"ExprStruct"
表示无需计算即可修改的表达式.
更多信息
- "ExprStruct" 可用于在不进行运算的情况下处理 Wolfram 语言表达式.
- "ExprStruct" 进行不可变调整,总是将结果作为新的数据结构返回:
-
CreateDataStructure["ExprStruct",expr] 创建一个包含 expr 的新 "ExprStruct" Typed[x,"ExprStruct"] 将类型 "ExprStruct>" 赋予 x - 用带有 "ExprStruct" 元素的 Import 格式 "WL" 创建 "ExprStructs" 数据结构.
- 用带有 "ExprStruct" 元素的 Import 格式 "WXF" 和 "MX" 创建 "ExprStruct" 数据结构.
- 对于 "ExprStruct" 类型的数据结构,可以使用以下运算:
-
ds["Apply",fun] 返回一个 expr 结构,其中表达式的头部被 fun 替换 时间:O(n) ds["ConstructWith",fun] 返回一个新的 expr 结构,其中 fun 应用于表达式 时间:O(1) ds["Depth"] 指明表达式任何部分的最大索引数 时间:O(1) ds["Drop",i] 返回一个新的 expr 结构,其中删除了第 i 个元素 时间:O(n) ds["Drop",i,j] 返回一个新的 expr 结构,其中删除了 i 和 j 之间的元素 时间:O(n) ds["Evaluate"] 返回计算表达式的新 expr 结构 ds["Fold",fun] 将 fun 应用于表达式的元素,累计结果 时间:O(n) ds["Fold",fun] 将 fun 应用于表达式的元素,从 init 开始,并累计结果 时间:O(n) ds["Get"] 返回 ds 持有的表达式 时间:O(1) ds["Head"] 返回一个包含表达式头部的新 expr 结构 时间:O(1) ds["Insert",x,i] 返回一个新的 expr 结构,其中 x 插入到位置 i 时间:O(n) ds["Length"] 存储在表达式中的元素数量 时间:O(1) ds["Map",fun] 返回一个新的 expr 结构,将 fun 应用于表达式的每个元素 时间:O(n) ds["MapImmediateEvaluate",fun] 返回一个新的 expr 结构,将 fun 应用于表达式的每个元素并对其进行计算 时间:O(n) ds["Part",i] 返回表达式第 i 部分的新 expr 结构 时间:O(1) ds["ReplacePart",ix] 返回一个新的 expr 结构,其中表达式的第 i 部分被替换为 x 时间:O(n) ds["Visualization"] 返回 ds 的可视化表示 时间:O(n) - 还支持以下函数:
-
dsi===dsj 若 dsi 等于 dsj 则为 True FullForm[ds] ds 的完全形式 Information[ds] ds 的信息 InputForm[ds] ds 的输入形式 Length[ds] length of ds Normal[ds] 将 ds 转换为一般表达式
范例
打开所有单元 关闭所有单元基本范例 (2)
可以使用 CreateDataStructure 创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[1, 2, 3]]返回一个用 h 对表达式进行封装的新 "ExprStruct":
ds1 = ds["ConstructWith", h]ds1["Get"]ds["Get"]创建一个新的 "ExprStruct" 数据结构:
ds = CreateDataStructure["ExprStruct", Nest[f, x, 20]]ds["Depth"]ds["Visualization"]范围 (20)
信息 (1)
可使用 CreateDataStructure 创建新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[1]]Information[ds]导入 (4)
使用 "ExprStructs" 元素导入 "WL" 格式会创建 "ExprStruct" 数据结构:
Import["ExampleData/Collatz.m", "ExprStructs"]使用 Import 将字符串加载到 "ExprStruct" 中:
ds = ImportString["Print[1]", {"WL", "ExprStructs", 1}]ds["ConstructWith", Hold]["Get"]使用 "ExprStruct" 元素导入 "WXF" 格式会创建 "ExprStruct" 数据结构:
bytes = BinarySerialize[Unevaluated[1 + 1]]
ds = ImportByteArray[bytes, {"WXF", "ExprStruct"}]ds["ConstructWith", Hold]["Get"]使用 "ExprStruct" 元素导入 "MX" 格式会创建 "ExprStruct" 数据结构:
str = ExportString[f[1], "MX"];
ds = ImportString[str, {"MX", "ExprStruct"}]ds["Get"]操作 (15)
"Apply" (1)
创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[x, y]]返回一个新的 "ExprStruct",其中表达式的头被替换为 g:
ds1 = ds["Apply", g]ds1["Visualization"]"ConstructWith" (1)
创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[x, y]]返回一个新的 "ExprStruct",其中 g 被应用于该表达式:
ds1 = ds["ConstructWith", g]ds1["Visualization"]"Depth" (1)
创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[x, y]]ds["Depth"]"Drop" (1)
创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[x, y, z]];
ds["Visualization"]删除表达式的第二个元素,返回一个新的 "ExprStruct":
ds1 = ds["Drop", 2]ds1["Visualization"]"Evaluate" (1)
创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", Unevaluated[Plus[4, 2]]];
ds["Visualization"]返回一个包含表达式求值结果的新 "ExprStruct":
ds1 = ds["Evaluate"]ds1["Visualization"]"Fold" (1)
创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[1, 2, 3, 4]];
ds["Visualization"]使用 Plus 合并表达式的所有元素,产生它们的总和:
ds["Fold", Plus]ds["Fold", Plus, 42]"Get" (1)
创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[x, y]]ds["Get"]Normal 返回相同的表达式:
Normal[ds]"Head" (1)
创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[x, y]]将表达式的头部作为新的 "ExprStruct" 返回:
ds1 = ds["Head"]ds1["Get"]"Insert" (1)
创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[x, y]]在指定位置插入一个元素,返回一个新的 "ExprStruct":
ds1 = ds["Insert", z, 2]ds1["Visualization"]"Length" (1)
创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[x, y]]ds["Length"]Length 函数给出相同的值:
Length[ds]"Map" (1)
创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[x, y, z]]返回一个新的 "ExprStruct",其中 Print 被应用于该表达式的每个元素:
ds1 = ds["Map", Print]ds1["Visualization"]"MapImmediateEvaluate" (1)
创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[x, y, z]]返回一个新的 "ExprStruct",其中 Print 被应用于该表达式的每个元素并完成求值:
ds1 = ds["MapImmediateEvaluate", Print]ds1["Visualization"]"Part" (1)
创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[x, y, z]]获取表达式的第二个元素作为 "ExprStruct":
ds1 = ds["Part", 2]ds1["Visualization"]"ReplacePart" (1)
创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[x, y, z]]返回一个新的 "ExprStruct",其中该表达式的第二部分被替换为 g:
ds1 = ds["ReplacePart", 2, g]ds1["Visualization"]"Visualization" (1)
创建一个新的 "ExprStruct":
ds = CreateDataStructure["ExprStruct", f[x, y, z]]ds["Visualization"]应用 (1)
未计算的表达式 (1)
ds = CreateDataStructure["ExprStruct", f[1, 2]]用 Plus 替换头部:
ds = ds["Apply", Plus]ds["Visualization"]将 f 应用于每个元素会创建一个新的 "ExprStruct":
ds["Map", f]["Visualization"]ds["Map", # ^ 2&]["Visualization"]要在应用后计算每个元素,请使用 "MapImmediateEvaluate" 的运算:
ds["MapImmediateEvaluate", # ^ 2&]["Visualization"]属性和关系 (4)
InputForm (1)
InputForm 返回 "ExprStruct" 的序列化内容:
InputForm[CreateDataStructure["ExprStruct", f[x]]]DataStructure["ExprStruct", {"Data" :> f[x]}]Length (1)
可以使用 Length 获取存储在 "ExprStruct" 内部的表达式的长度:
ds = CreateDataStructure["ExprStruct", {x, y, z}];
Length[ds]ds["Length"]Normal (1)
Normal 可用于获取 "ExprStruct" 的内容:
ds = CreateDataStructure["ExprStruct", f[x, y]];
Normal[ds]ds["Get"]SameQ (1)
SameQ 可用于测试两个 "ExprStruct" 数据结构是否包含相同的内容:
ds1 = CreateDataStructure["ExprStruct", f[x]];
ds2 = CreateDataStructure["ExprStruct", f[x]];
ds1 === ds2ds1["ConstructWith", g];
ds1 === ds2历史
2020年引入 (12.1)