表达式
可以使用 FullForm[expr] 来查看任何表达式的完全格式.
表达式 f[x,y,…] 中的对象 f 被称为表达式的标头(Head),可以使用 Head[expr] 提取. 特别是当使用Wolfram 语言编写程序时,您经常会需要测试表达式的标头以具体了解表达式所表示的事物类型.
表达式的概念是 Wolfram 系统中一项至关重要的统一原则. 正是因为 Wolfram 系统中的每个对象都具有相同的底层结构,才使得 Wolfram 系统可以用相对较少的基本操作覆盖如此多的应用区域.
f的意义 | x,y,…的意义 | 例 |
实参或形参 | Sin[x]
,
f[x,y] | |
命令 | 实参或形参 | Expand[(x+1)^2] |
算子 | 运算数 | x+y
,
a=b |
元素 | {a,b,c} | |
对象类型 | 内容 | RGBColor[r,g,b] |
在 Wolfram 系统中,表达式的一个可能更重要的用途是维持结构,然后可以由其他函数进行操作. 像 {a,b,c} 这样的表达式未指定操作. 它仅维持一个由三个元素组成的列表的结构. 其他函数,如 Reverse 或 Dot,可以作用于此结构.
在 Wolfram 系统中使用表达式可以创建自己的结构. 例如,您可能想在三维空间中表示由三个坐标指定的点. 可以将每个点用 point[x,y,z] 指定. “函数” point 不执行任何操作. 它仅用于将三个坐标集合在一起,并将所得对象标记为一个 point.
可以将表达式(如 point[x,y,z])视为用特定标头标记的“数据包”. 即使所有表达式都具有相同的基本结构,也可以通过不同的标头来区分不同的“类型”. 然后可以设置转换规则和程序,以不同的方式处理不同类型的表达式.
Wolfram 语言具有确定的语法来指定应如何将输入转换为内部形式. 该语法一方面指定应如何对输入内容进行分组. 例如,如果输入一个表达式 a+b^c,Wolfram 语言语法指定应按照标准数学符号将其视为 a+(b^c),而不是 (a+b)^c. Wolfram 语言之所以这样分组,是因为它认为运算符 ^ 的优先级高于 +. 通常,具有较高优先级的运算符的参数先分组,然后具有较低优先级运算符的参数再分组.
"运算符的输入形式" 的表中按优先级从高到低的顺序给出了 Wolfram 语言的所有运算符. 优先顺序应尽可能遵循标准的数学用法,并尽量减少通常需要的括号个数.
但在许多情况下,确实必须使用括号. 例如,因为 ; 优先级比 = 低,写 x=(a;b) 需要使用括号. Wolfram 系统将表达式 x=a;b 解释为 (x=a);b. 通常,括号多余并无大碍,但是如果该加括号而没加,则会造成很多麻烦,Wolfram 系统可能会以不希望的方式来解释您的输入.
Wolfram 语言中有几种常见的运算符类型. x+y 中的 + 是“中缀”运算符. -p 中的 - 是“前缀”运算符. 即使输入 f[x,y,…] 之类的表达式,Wolfram 语言也允许您模仿中缀、前缀和后缀的形式来写.
我们往往会在事后想起添加诸如 N 这样的函数,并以后缀形式给出:
应该认识到,将指标分配给表达式的各部分是根据表达式的内部 Wolfram 语言形式完成的,如 FullForm 所示. 这些形式并不总与输出内容直接对应. 代数表达式尤其如此,其中 Wolfram 语言使用标准内部形式,但以特殊方式显示表达式.
Part[expr,n] or expr[[n]] | expr 的第 部分 |
Part[expr,{n1,n2,…}] or expr[[{n1,n2,…}]] | |
表达式各部分的组合 | |
Part[expr,n1;;n2] | 表达式的 至 部分 |
ReplacePart[expr,n->elem] | 用 elem 代替 expr 的第 部分 |
"操作列表元素" 讨论如何使用指标列表一次选择列表中的几个元素. 可以使用相同的方式一次选择表达式的多个部分.
"列表"中介绍的大部分列表操作都可以用于 Wolfram 语言表达式. 通过这些操作,从而用多种方式来操纵表达式的结构.
应该记住,所有操纵表达式结构的函数都作用于表达式的内部形式. 可以使用 FullForm[expr] 查看这些形式. 它们可能不是所期望的表达式输出格式.
可以使用 Append 添加参数:
任何 Wolfram 语言表达式都可以被看成树. 在上面的表达式中,树的顶部节点由 Plus 组成. 从该节点进入两个“分支”,x^3 和 (1+x)^2. 节点 x^3 上有两个分支 x 和 3,它们可以看作树的“叶子”.
通过函数 Part 可以访问 Wolfram 语言表达式的特定部分. 但是当表达式具有相当统一的结构时,能够同时指代部分的一整组集合通常更方便.
使用层控制 Position.