自我毁灭的函数
来自 Michael Trott 的小技巧,能让一个函数在运行中毁灭自己,即清除自己的定义:
Clear[f, x, y, z]; z = 5; f[x_] := (Clear[f]; Print[x]);
暂时不知道有什么用处。
MapAll是深度优先的
Thread和MapThread
二者的区别在于:
1. 如果被Thread的函数本来就能运行了,那么就会出乱子。MapThread没有这个问题。
2. MapThread可以指定层次,Thread不行。
Outer
Outer是可以用层次指定的。默认是作用到最深层。
规则的排序
如果一个函数有多个定义。系统会在其DownValues中自动对其排序,排序的定义是特殊的定义在前,一般的定义在后。这里所说的“定义”的特殊或一般指的是规则的模式的特殊和一般。其判断方式是完全基于语法的,跟语义没有关系。