http://www.wolfram.com/language/fast-introduction-for-programmers/zh/

  1. Shift + Enter 开始计算
  2. Quit 退出当前 Math Kernel 会话,再次计算会自动启动新的 Math Kernel 会话
  3. In[n], Out[n], % 表示上一次输出, %%表示上上次输出,依次类推;%n 表示 Out[n]
  4. CMD+L 复制并粘贴上一次输入
  5. 所有符号表达式都具有相同的基本结构:head[arguments]
    1. FullForm[expr]: 显示底层结构
    2. Head[expr]: 给出表达式的头部
    3. Length[expr]: 给出表达式中参数的个素
  6. List
    1. 字面语法:{a, b, c}
    2. 索引:list[[i]], i 从 1 开始,负数表示从末尾开始计数
    3. 许多运算符都是向量化运算,比如 {1, 2, 3} + 2
    4. 列表切片:list[[i ;; j]],闭区间
  7. Iterator
    1. Table[x^2, {x, MAX}]
    2. Table[x^2, {x, MIN, MAX}]
    3. Table[x^2, {x, MIN, MAX, STEP}]
    4. Table[x * y, {x, ...}, {y, ...}]
    5. Array[f, n]
  8. Assignment
    1. = 表示立即赋值
    2. := 表示延迟复制,被用到时重新计算
    3. var = . 清除赋值
    4. 局部变量:Module[{a = 1}, a + 8]
  9. Pattern
    1. _ (读做 blank)表示任意表达式: Replace[f[100], f[x_] -> x + 5],这里 x_x: _ 的简写
    2. __ (double blank) 表示任意表达式序列:Cases[{f[1, 2], f[1], g[3]}, f[__]]
    3. a | b | c 表示或者:
      1. Cases[{f[1], g[2], f[2], f[5]}, f[1 | 5]]
      2. Cases[{f[1], g[2], f[2], f[5]}, (f | g)[2]]
    4. _head 匹配包含头部 head 的表达式:Cases[{1, 2.5, 3.5, 4}, _Real]
    5. -> 使用模式来定义规则,规则右边的表达式在定义时即计算: f[x_] -> x + RandomReal[]
    6. :>-> 的区别是在规则使用时才计算右边表达式: f[x_] :> x + RandomReal[]
    7. /. 表示"替换所有”(应用重写规则): {f[1], g[2], f[5], g[3]} /. f[x_] -> x + 5
  10. Function
  11. f[x_, y_] := x - y
  12. f[x_, y_] := x - y /; x > y, /; x > y 表示当 x > y 时才应用这个函数
  13. f[1] = 2, f[2] = 3, 定义过的 case 会计算,没定义的 case 保留原样: {f[1], f[2], f[3], f[4]}
  14. Clear[f] 清除函数定义
  15. Pure function(匿名函数,lambda 表达式)
    1. expr &, 表达式中的 # 或者 #1 表示第一个参数,#2 表示第二个参数
    2. Function[{x, y}, expr],命名参数的匿名函数
  16. Apply function
  17. Map[f, {a, b, c, d}], 简写 f /@ {a, b, c, d}
  18. Map[f, expr, levelspec],默认在 level 1 操作
  19. Apply[f, {a, b, c, d}]] 等价于 f[a, b, c, d]
  20. Apply[f, expr, levelspec],默认在 level 0 操作,将 expr 的对应 level 的 head 替换成 f
  21. @ 是普通函数调用:f @ {{a, b}, {c, d}} 等价于 f[{{a, b}, {c, d}}]
  22. @@ 等价于 Apply(apply at level 0): f @@ {{a, b}, {c, d}} 等价于 f[{a, b}, {c, d}]
  23. @@@ 等价于 “apply at level 1”: f @@@ {{a, b}, {c, d}} 等价于 {f[a, b], f[c, d]}
  24. expr // f 等价于 f[expr]
  25. NestList[f, x, n] 相当于 {x, f[x], f[f[x]], ...}
  26. Nest[f, x, n] 相当于 f[f[f[....f[x]]]]
  27. NestGraph[f, x, n] 嵌套的应用 f,形成一个图
  28. FoldList[f, x, list]
  29. 函数选项(Options)
  30. Func[arguments, nameA -> valueA, ...], 使用 :> 替换 -> 表示每次用到这个 option 时都重新计算(跟 rule 的定义方式一致)
  31. Options[Func] 查看函数的所有选项
  32. Graphics
  33. ListLinePlot[{5, 6, 1, 5, 7, 8, 1, 3}]
  34. Graph[{1 -> 3, 1 -> 2, 2 -> 4, 4 -> 5, 5 -> 1}]
  35. Graphics[{Orange, Disk[{0, 0}], Opacity[.7], Pink, Disk[{1, 0}]}]
  36. Interactive Interaces
  37. Manipulate[Plot[Sin[a x], {x, 0, 10}], {a, 1, 5}]
  38. 过程式编程
  39. Print[a]; Print[b]; Print[c] 分号分隔表达式
  40. Module[] 词法作用域,变量存放在后端(Math Kernel) 中
  41. Block[] 动态作用域
  42. DynamicModule[] 词法作用域,变量存放在前端(Notebook) 中
  43. Sow/Reap vs. Throw/Catch
  44. True, False, If
  45. 数字: N[expr, precision]expr`precision
  46. 字符串:
  47. <> 连接字符串
  48. ~~ 连接正则表达式和字符串
  49. 输入 Unicode 字符:\[Alpha], ESCAESC, \:03b1 都是输入 α
  50. 字符串模版:TemplateApply["number `` date: <* Now *>", {56}], `` 表示占位符,<* expr *> 表示插值
  51. 关联 (Associations)
  52. <|"a" -> x, "b" -> y|> 定义关联,expr[key] 获取值
  53. 匿名函数中可以用 #key 得到关联中的值:{#b, 1 + #b}&[<|"a"->x, "b"->y|>]
  54. 关联和列表同时使用:<|"a" -> x, "b" -> {5, 6}|>[["b", 1]]
  55. 字符串模版:TemplateApply["first `a`; second `b`; first `a`", <|"a" -> x, "b" -> y|>]