结构的操作
Mathematica 有改变表达式结构的有效功能. 这可以使我们实现合并、分配等数学特性,并对一些简洁和有效的程序提供基础.
这里我们描述各种对表达式进行的操作. "属性" 介绍一些操作如何自动在所有具有特定头部并且该头部被赋以适合的属性的表达式上进行.
Mathematica 函数 Sort[expr] 不仅排列列表元素,也对具有任意头部的表达式排序. 用这种方式,我们可以对任意函数实现结合特性或对称性.
| Out[1]= |  |
按顺序分类.
Sort 的第二个变量是用于决定是否每对都是排好序的函数. 排序按递减顺序进行.
| Out[2]= |  |
根据不含

的元素比含

的元素靠前的次序排列.
| Out[3]= |  |
压平表达式的结构.
| Out[4]= |  |
| Out[5]= |  |
可以使用 Flatten 进行组合. 函数 Distribute 允许你实施特性, 例如,分配特性和线性.
分配律.

分配到

.
| Out[6]= |  |
| Out[7]= |  |
一般地,f 分配到和式 Plus 时,是将如
的表达式展开为
. 函数 Expand 对标准的代数乘法如Times 进行类似的分配展开. Distribute 可对任意运算进行类似的分配展开.
| Out[8]= |  |
对一个列表,而非和式,进行分配. 结果包含所有可能的变量对.
| Out[9]= |  |
当表达式的头部为

时,对其进行分配.
| Out[10]= |  |
当头部是

时,对列表进行分配. 结果,用

代替列表
List,用

代替

.
| Out[11]= |  |
与 Distribute 相关的是函数 Thread. Thread 将函数并行地作用于一个列表或表达式的所有项.
| Thread[f[{a1,a2},{b1,b2}]] | 将 f 线性作用于列表给出  |
| Thread[f[args],g] | 将 f 线性作用于头部为 g 的变量 args 上 |
线性作用于表达式的函数.
| Out[12]= |  |
| Out[13]= |  |
| Out[14]= |  |
在 "将一些对象放在一起" 中提到,并且在 "属性" 中有更详细的讨论,Mathematica 的许多内置函数具有"可列表"的性质,它们可以自动进行线性作用.
内置函数,比如
Log 是"可列表"的,因此它们可以自动逐项作用于列表.
| Out[15]= |  |
| Out[16]= |  |
| Out[17]= |  |
| Outer[f,list1,list2] | 广义外积 |
| Inner[f,list1,list2,g] | 广义内积 |
广义内积和外积.
Outer[f, list1, list2] 给出
和
中元素所有可能的组合,并将 f 作用于这些组合. Outer 可以看作是张量的积的推广,如 "张量" 中讨论的.
| Out[18]= |  |
这里
Outer 产生一个下三角 Boolean 矩阵.
| Out[19]= |  |
| Out[20]= |  |
像 Distribute 一样,Outer 给出元素所有可能的组合,而 Inner 像 Thread 一样仅给出表达式中相应位置元素的组合.
| Out[21]= |  |
| Out[22]= |  |