Mathematica 覚書

Mathematica の本家サイトの構成が微妙に使いにくいので、自分用メモ。
チートシート的な。

## [Wolfram言語のシンタックス](http://reference.wolfram.com/language/guide/Syntax.html)

### 記号

検索しにくい記号が沢山ある。コードを読むために片っ端からメモ。

#### [割当て](http://reference.wolfram.com/language/guide/Assignments.html)

『[異なるシンボルへの定義式の関連付け](http://reference.wolfram.com/language/tutorial/AssociatingDefinitionsWithDifferentSymbols.html)』を要確認

* [`=`](http://reference.wolfram.com/language/ref/Set.html) - Set 代入
* [`:=`](http://reference.wolfram.com/language/ref/SetDelayed.html) - SetDelayed 遅延代入（下向き）
   * `f[x_]:=x^2`
* [`/:`~`=`](http://reference.wolfram.com/language/ref/TagSet.html) - TagSet タグ代入
* [`/:`~`:=`](http://reference.wolfram.com/language/ref/TagSetDelayed.html) - TagSetDelayed タグ付き遅延代入
* [`^=`](http://reference.wolfram.com/language/ref/UpSet.html) - UpSet 上向き代入
* [`^:=`](http://reference.wolfram.com/language/ref/UpSetDelayed.html) - UpSetDelayed （上向き）遅延代入
* [`=.`](http://reference.wolfram.com/language/ref/Unset.html) - Unset 割当て解除
* [`/:`~`=.`](http://reference.wolfram.com/language/ref/TagUnset.html) - TagUnset タグ付き割当て解除

#### [規則](http://reference.wolfram.com/language/guide/Rules.html)

##### 規則の表現

* [`->`](http://reference.wolfram.com/language/ref/Rule.html) - Rule 置換規則
   * `(a + y) /. a -> x` -> `x + y`
   * `{x, y} /. {x -> 1, y -> 2}` -> `{1, 2}`
* [`:>`](http://reference.wolfram.com/language/ref/RuleDelayed.html) - RuleDelayed

##### 規則の適用

* [`/.`](http://reference.wolfram.com/language/ref/ReplaceAll.html) - ReplaceAll 置換
* [`//.`](http://reference.wolfram.com/language/ref/ReplaceRepeated.html) - ReplaceRepeated

#### [パターン](http://reference.wolfram.com/language/guide/Patterns.html)

##### 基本のパターンオブジェクト

* [`_`, <code><var>x</var>&#x5F;</code>, <code>&#x5F;<var>h</var></code>](http://reference.wolfram.com/language/ref/Blank.html) - Blank
* [`__`](http://reference.wolfram.com/language/ref/BlankSequence.html) - BlankSequence
* [`___`](http://reference.wolfram.com/language/ref/BlankNullSequence.html) - BlankNullSequence

##### 複合パターン

* [<code><var>p<sub>1</sub></var>|<var>p<sub>2</sub></var>|…</code>](http://reference.wolfram.com/language/ref/Alternatives.html) - Alternatives
* [<code><var>p</var>..</code>](http://reference.wolfram.com/language/ref/Repeated.html) - Repeated くり返し
* [<code><var>p</var>...</code>](=http://reference.wolfram.com/language/ref/RepeatedNull.html) - RepeatedNull
* [<code><var>x</var>:<var>p</var></code>](http://reference.wolfram.com/language/ref/Pattern.html) - Pattern

##### パターンの制限

* [`/;`](http://reference.wolfram.com/language/ref/Condition.html) - Condition 条件
* [`?`](http://reference.wolfram.com/language/ref/PatternTest.html) - PatternTest
   * <code><var>p</var>?<var>test</var></code>

##### パターンのデフォルト

* [<code>_:<var>e</var></code>, <code><var>s</var>&#x5F;.</code>](http://reference.wolfram.com/language/ref/Optional.html) - Optional

#### [リストの要素](http://reference.wolfram.com/language/guide/ElementsOfLists.html)

* [`[[`...`]]`](http://reference.wolfram.com/language/ref/Part.html) - Part リストの要素取り出し
   * `{a, b, c}[[1]]` -> `Part[{a, b, c}, 1]` -> `a` == `First[{a, b, c}]` - リストの第1要素
   * `{a, b, c, d}[[-1]]` == `Last[{a, b, c, d}]` -> `d` - 末尾から数えた第1要素
   * `{{a1, a2}, {b1, b2}, {c1, c2}}[[3]][[2]]` ==  `{{a1, a2}, {b1, b2}, {c1, c2}}[[3, 2]]` == `Part[list, 3, 2]` -> `c2`
* [`;;`](http://reference.wolfram.com/language/ref/Span.html) - Span スパン
  * `{a, b, c, d}[[2 ;; 3]]` -> `{b,c}`

#### [関数型プログラミング](http://reference.wolfram.com/language/guide/FunctionalProgramming.html)

* [`&`](http://reference.wolfram.com/language/ref/Function.html) - Function 純関数 
* [`#`, <code>#<var>n</var></code>, <code>#<var>name</var></code>](http://reference.wolfram.com/language/ref/Slot.html) - Slot 引数
* [`##`, <code>##<var>n</var></code>](http://reference.wolfram.com/language/ref/SlotSequence.html) - SlotSequence 引数リスト
   * `(# + 2)&` -> `Function[a, a+2]`
   * `(#1 * #2)&` -> `Function[{a, b}, a * b]`
   * `f[##]&` -> `Function[args, f @@ args]` -> `f`

##### [関数のリストへの適用](http://reference.wolfram.com/language/guide/ApplyingFunctionsToLists.html)

* [`/@`](https://reference.wolfram.com/language/ref/Map.html) - Map 写像
   * `f /@ {a, b, c}` -> `{f[a], f[b], f[c]}`
* [`@@`, `@@@`](http://reference.wolfram.com/language/ref/Apply.html) - Apply 適用
   * `f @@ {a, b, c, d}` -> `f[a, b, c, d]`
   * `f @@@ {{{1, 2}, 3}, 4, 5}` -> `{f[{1, 2}, 3], 4, 5}`

#### [Wolfram言語のシンタックス](http://reference.wolfram.com/language/guide/Syntax.html)

##### 短縮形

* [`@`](http://reference.wolfram.com/language/ref/Prefix.html) - Prefix 前置記法
   * `f @ x` -> `f[x]`
* [`//`](http://reference.wolfram.com/language/ref/Postfix.html) - Postfix 後置記法
   * `{a, b, c} // f` -> `f[{a, b, c}]`
   * `{a, b, c} // f @@ ## &` -> `f[a, b, c]`

##### プログラムシンタックス

* [`;`](http://reference.wolfram.com/language/ref/CompoundExpression.html) - CompoundExpression 重文 - 逐次実行。Scheme の[`begin`](https://practical-scheme.net/gauche/man/gauche-refj/Shun-Ci-Shi-Xing-.html#index-begin)的な。
   * `f[1]; f[2]; f[3]`
* [`(*`, `*)`](http://reference.wolfram.com/language/tutorial/DocumentationConstructs.html) - 範囲コメント、ネスト可能。行コメントは無いorz
   * `If[a > b,(*then*) p,(*else*) q]`
   * コンテクストメニューから、「コメント化／非コメント化」が可能
* [<code>`</code>](https://reference.wolfram.com/language/tutorial/Contexts.html) - コンテキストマーク
   * オブジェクトは「<code><var>context</var>`<var>short</var></code>」のような正式名称をもつ
   * [<code><var>Package</var>&#96;</code>](http://reference.wolfram.com/language/tutorial/SettingUpWolframLanguagePackages.html) - パッケージ名の末尾にもバッククォート <code>`</code> が付く
* [`<<`](http://reference.wolfram.com/language/ref/Get.html) - Get 読み込み
  * <code><<<var>file</var></code> - <var>file</var> 読み込み
  * <code><<<var>package</var>`</code> - パッケージ<var>package</var>をロードする

##### セッションシンタックス

* [<code>%<var>n</var></code>, `%`, `%%`](http://reference.wolfram.com/language/ref/Out.html) - Out 出力 - 先の出力結果を利用できる。
   *  `%23` -> `Out[23]`
   *  `%` - 1番最後の出力
   *  `%%`,`%%%`,... - 最後から2番目、3番目、...の出力

#### [文字列操作](http://reference.wolfram.com/language/guide/StringManipulation.html)

* [`<>`](http://reference.wolfram.com/language/ref/StringJoin.html) - StringJoin 文字列結合
   * `"My" <> "Name" <> "Is"` -> "MyNameIs"

#### [行列の操作](http://reference.wolfram.com/language/guide/MatrixOperations.html)

* [`.`](http://reference.wolfram.com/language/ref/Dot.html) - Dot ドット積
   * 非可換積の表現にも用いられる。FeynCalc などで
* [<code>&#10799;</code>](http://reference.wolfram.com/language/ref/Cross.html) - Cross 外積

#### [数値の精度](http://reference.wolfram.com/language/tutorial/NumericalPrecision.html#28889)

* [<code>&#x60;</code>, <code>&#x60;&#x60;</code>](http://reference.wolfram.com/language/tutorial/NumericalPrecision.html#28889) - 数の末尾にバッククォート<code>`</code>を付けることで、数字の精度、確度を指定する
   * <code>123.456`</code> - 機械精度
   * <code>123.456`200</code> - 任意**精度**（この場合は200桁精度）の数
   * <code>123.456``200</code> - 任意**精度**（この場合は200桁確度）の数
* [`^^`](http://reference.wolfram.com/language/tutorial/NumericalPrecision.html#28889) - <code><var>底</var>^^<var>数</var></code> の形式で、数の底を指定した表記が出来る
   * `2^^101` -> `5`
   * `16^^FFFF` -> `65535`
 
#### [連想](https://reference.wolfram.com/language/guide/Associations.html)

* [`<|`, `|>`](https://reference.wolfram.com/language/ref/Association.html) - Association 連装
   * <code><|<var>key<sub>1</sub></var>-><var>val<sub>1</sub></var>, <var>key<sub>2</sub></var>-><var>val<sub>2</sub></var>, …|></code>
* [<code><var>assoc</var>[<var>key</var>]</code>](https://reference.wolfram.com/language/ref/Association.html) - 連想 <var>assoc</var> からキー <var>key</var> の値を取り出す
   * `<|a -> b, c -> d|>[a]` -> `b`
* [<code>[[…]]</code>](https://reference.wolfram.com/language/ref/Part.html) - Part
   * `<|a -> b, c -> d|>[[Key[a]]]` -> `b` - 連想に `[[…]]`(`Part`) でアクセスするときは、キーの[`Key`](https://reference.wolfram.com/language/ref/Key.html)ラップが必要。
   * `<|"a" -> b, "c" -> d|>[["a"]]` -> `b` - キーが文字列の時は、`Key` は省略可

## [式](https://reference.wolfram.com/language/guide/Expressions.html)

### [式の構造](https://reference.wolfram.com/language/guide/ExpressionStructure.html)

* [`FullForm`](https://reference.wolfram.com/language/ref/FullForm.html) - 式を（構文による省略記法なしに）完全な形式で表示する
   * `FullForm[a + b*c]` -> `Plus[a,Times[b,c]]`
* [`TreeForm`](https://reference.wolfram.com/language/ref/TreeForm.html) - 式をツリー形式で表示する
   * `TreeForm[a + (b*c)^d/e]` -> <img src="https://qiita-image-store.s3.amazonaws.com/0/45805/7f257593-0d3a-33b7-4db2-18d204f0a261.png" alt="TreeForm[a + (b*c)^d/e]" width="240px"/>
* [`Head`](https://reference.wolfram.com/language/ref/Head.html) - 式の頭部を返す。Scheme の car, Haskell の head 的な？
   * `Head[f[a, b]]` -> `f`
   * アトミックな式に対しては型名を返す。
      * `Map[Head, {1, 0.1, 1 + I, "text", a}]` -> `{Integer, Real, Complex, String, Symbol}`
* [`Length`](https://reference.wolfram.com/language/ref/Length.html) - 式の要素数を返す
   * `{f[a], f[a, b, c], {a, b, c, d}} // Map[Length, #] &` -> `{1,3,4}`
* [`Level`](https://reference.wolfram.com/language/ref/Level.html) - 式の、与えられたレベルにある全要素をリストにして返す。
* [`Depth`](https://reference.wolfram.com/language/ref/Depth.html) - 式の最大深度を返す
   * 式の最大深度=ツリー形式で式を表したときの階数=式の任意の要素を指定するのに必要な次数+1
   * `Depth[{a, {b}}]` -> `3`
   * `{a, {b, c}} // TreeForm` -> <img src="https://qiita-image-store.s3.amazonaws.com/0/45805/97e9aaeb-3a93-f533-7f0c-cd87f2b94033.png" alt="{a, {b, c}} // TreeForm" width="240px" />

* チュートリアル：[式の木構造](https://reference.wolfram.com/language/tutorial/ExpressionsAsTrees.html)

### [式の判定](https://reference.wolfram.com/language/guide/TestingExpressions.html)

#### 等号と不等号

* [`Equal`, `==`](https://reference.wolfram.com/language/ref/Equal.html)
* [`Unequal`, `!=`, <code>&#x2260;</code>](https://reference.wolfram.com/language/ref/Unequal.html)
* [`SameQ`, `===`](https://reference.wolfram.com/language/ref/SameQ.html)
* [`UnsameQ`, `=!=`](https://reference.wolfram.com/language/ref/UnsameQ.html)
* [`Less`, `<`](https://reference.wolfram.com/language/ref/Less.html)
* [`Greater`, `>`](https://reference.wolfram.com/language/ref/Greater.html)
* [`LessEqual`, `<=`, <code>&#x2264;</code>](https://reference.wolfram.com/language/ref/LessEqual.html)
* [`GreaterEqual`, `>=`, <code>&#x2265;</code>](https://reference.wolfram.com/language/ref/GreaterEqual.html)
* [`Between`](https://reference.wolfram.com/language/ref/Between.html)
   * <code>Between [<var>x</var>, {<var>min</var>, <var>max</var>}]</code> - <var>min</var> ≤ <var>x</var> ≤ <var>max</var> ? と等価
   * <code>Between [<var>x</var>, {<var>min<sub>1</sub></var>, <var>max<sub>1</sub></var>}, {<var>min<sub>2</sub></var>, <var>max<sub>2</sub></var>}, …]</code> - ∃<sub><var>i</var></sub> (<var>min<sub>i</sub></var> ≤ <var>x</var> ≤ <var>max<sub>i</sub></var>) ? と等価

#### 論理結合

* [`And`, `&&` <code>&#x2227;</code>](https://reference.wolfram.com/language/ref/And.html)
* [`Or`, `||` <code>&#x2228;</code>](https://reference.wolfram.com/language/ref/Or.html)
* [`Not`, `!`, <code>&#x00AC;</code>](https://reference.wolfram.com/language/ref/Not.html)

#### 数の特性

* [`NumberQ`](https://reference.wolfram.com/language/ref/NumberQ.html) - 明白な「数」（例えば Integer, Real, Complex, Rational 型）についてのみ真 `True` を返す
* [`MachineNumberQ`](https://reference.wolfram.com/language/ref/MachineNumberQ.html)
* [`NumericQ`](https://reference.wolfram.com/language/ref/NumericQ.html)
* [`IntegerQ`](https://reference.wolfram.com/language/ref/IntegerQ.html)
* [`EvenQ`](https://reference.wolfram.com/language/ref/EvenQ.html) - 偶数
* [`OddQ`](https://reference.wolfram.com/language/ref/OddQ.html) - 奇数
* [`PrimeQ`](https://reference.wolfram.com/language/ref/PrimeQ.html) - 素数
* [`CoprimeQ`](https://reference.wolfram.com/language/ref/CoprimeQ.html) - 与えられた数が互いに素である場合に真 `True` を返す
* [`AlgebraicIntegerQ`](https://reference.wolfram.com/language/ref/AlgebraicIntegerQ.html) - （主係数が 1 である）代数的数であるかを返す
   * 「主係数が 1」と限定しているので、$x^2-2=0$の解である $\sqrt{2}$ は代数的数であると判定するが、$2x^2-1=0$ の解である $1/\sqrt{2}$ は代数的数であるとは見做されない。
      * `AlgebraicNumberDenominator` を使用せよ
* [`Positive`](https://reference.wolfram.com/language/ref/Positive.html) - 式が正のときに限り真 `True` を返す
* [`Negative`](https://reference.wolfram.com/language/ref/Negative.html) - 負
* [`NonPositive`](https://reference.wolfram.com/language/ref/NonPositive.html) - 非正
* [`NonNegative`](https://reference.wolfram.com/language/ref/NonNegative.html) - 非負
* [`PossibleZeroQ`](https://reference.wolfram.com/language/ref/PossibleZeroQ.html) - 記号的処理によりゼロであると判定されたときに限り真 `True` を返す
   * 一般的に式がゼロであるかを問う「0-認識問題」は難しいので、これは限定されたテストを行っているだけである。

### [式の原子要素](https://reference.wolfram.com/language/guide/AtomicElementsOfExpressions.html)

* [`AtomQ`](https://reference.wolfram.com/language/guide/AtomicElementsOfExpressions.html) - 式が原子要素か否か

#### シンボル：[シンボルの扱い](https://reference.wolfram.com/language/guide/SymbolHandling.html)

* [`Symbol`](https://reference.wolfram.com/language/ref/Symbol.html) - 与えた文字列の名前のシンボルを返す
* [`SymbolName`](https://reference.wolfram.com/language/ref/SymbolName.html) - 与えたシンボルの名前を返す
   * `Clear[x]; SymbolName[x]` -> `"x"`
* [`Context`](https://reference.wolfram.com/language/ref/Context.html) - 現行のコンテキスト名を返す
   * `Context[]` -> `"Global`"`
* [`Names`](https://reference.wolfram.com/language/ref/Names.html)

## [手続き型プログラミング](https://reference.wolfram.com/language/guide/ProceduralProgramming.html)

### [ループ構文](https://reference.wolfram.com/language/guide/LoopingConstructs.html)

* [`Do`](https://reference.wolfram.com/language/ref/Do.html) - 与えられた範囲で変数を動かしながら式を繰り返す
   * `Module[{tmp = 0}, Do[tmp += i, {i, 1, 10}]; tmp]` -> `55`
* [`While`](https://reference.wolfram.com/language/ref/While.html) - <code>While [<var>test</var>, <var>body</var>]</code> - Whileループ
   * `Module[{tmp = 1}, While[tmp < 100, tmp *= 2]; tmp]` -> `128`
* [`For`](https://reference.wolfram.com/language/ref/For.html) - <code>For [<var>start</var>, <var>test</var>, <var>incr</var>, <var>body</var>]</code> - Forループ
   * `For[i = 0, i < 4, i++, Print[i]]`

### [フロー制御](http://reference.wolfram.com/language/guide/FlowControl.html)

* [`Return`](http://reference.wolfram.com/language/ref/Return.html) - 最も内側の制御構造から脱出し、与えられた式 (or `Null`) を返す
   * `f[] := Module[{}, Return[1]; Print[2]]; f[]` -> `1`
   * `Module[{tmp}, tmp = Do[Return[i], {i, 1, 2}]; -tmp]` -> `-1`
* [`Break`](https://reference.wolfram.com/language/ref/Break.html)
* [`Continue`](https://reference.wolfram.com/language/ref/Continue.html)
* [`Goto`](https://reference.wolfram.com/language/ref/Goto.html)
* [`Label`](https://reference.wolfram.com/language/ref/Label.html)
* 
* [`Throw`](http://reference.wolfram.com/language/ref/Throw.html)
* [`Catch`](http://reference.wolfram.com/language/ref/Catch.html)
* [`Check`](http://reference.wolfram.com/language/ref/Check.html) - 投げられるメッセージをキャッチする

* [`Abort`](http://reference.wolfram.com/language/ref/Abort.html) - ` Abort []` - 評価を中断する
* [`Pause`](http://reference.wolfram.com/language/ref/Pause.html) - 与えられた秒数だけ停止する

### [スコープ構文](https://reference.wolfram.com/language/guide/ScopingConstructs.html)

* [`With`](https://reference.wolfram.com/language/ref/With.html) - 局所**定数**を定義する。 
   * <code>With [{<var>x</var>=<var>x<sub>0</var></var>, <var>y</var>=<var>y<sub>0</sub></var>, …}, <var>expr</var>]</code>
* [`Module`](https://reference.wolfram.com/language/ref/Module.html) - 局所**変数**を定義する（レキシカルスコープ）
   * <code> Module [{<var>x</var>, <var>y</var>, …}, <var>expr</var>]</code>
   * <code> Module [{<var>x</var>=<var>x<sub>0</sub></var>, …}, <var>expr</var>]</code>
* [`Block`](https://reference.wolfram.com/language/ref/Block.html) - 局所**変数**を定義する（ダイナミックスコープ）
   * <code> Block [{<var>x</var>, <var>y</var>, …}, <var>expr</var>]</code>
   * <code> Block [{<var>x</var>=<var>x<sub>0</sub></var>, …}, <var>expr</var>]</code>

* 参考ページ：[Mathematica の With と Module と Block - ヒューリンクス（HULINKS）ブログ](http://blog.hulinks.co.jp/2011/06/with-module-and-block-in-mathematica.html)

## [リスト操作](http://reference.wolfram.com/language/guide/ListManipulation.html)

### [リストの構築](http://reference.wolfram.com/language/guide/ConstructingLists.html)

* [`Range`](http://reference.wolfram.com/language/ref/Range.html) - 数字の連続リストを返す
   * `Range[4.5]` -> `{1,2,3,4}`
   * `Range[x, x + 4]` -> `{x,x+1,x+2,x+3,x+4}` - デフォルト刻み幅は 1
   * `Range[1, 3, 0.5]` -> `{1.,1.5,2.,2.5,3.}`
   * `Range[x, x - 4, -1]` -> `{x,x-1,x-2,x-3,x-4}`
   * `Sin[\[Pi]*Range[0, 1/2, 1/6]]` -> `{0, 1/2, Sqrt[3]/2, 1}`
      * これはとても高速なリストの生成法らしい。See [here](http://reference.wolfram.com/language/tutorial/LinearAlgebraPerformance.html#1048970201).
* [`Table`](http://reference.wolfram.com/language/ref/Table.html) - 変数を動かしながら得た要素をリストを生成
* [`Array`](http://reference.wolfram.com/language/ref/Array.html) - 与えられた関数を要素に適用したリストを生成
* [`Tuples`](http://reference.wolfram.com/language/ref/Tuples.html) - 直積集合を生成
* [`Subsets`](http://reference.wolfram.com/language/ref/Subsets.html) - 可能なすべての部分集合（巾集合）を生成

* [`Reap`](http://reference.wolfram.com/language/ref/Reap.html) - 収穫 - 引数内で撒かれた（`Sow`された）要素を順に拾ってリストで返す
* [`Sow`](http://reference.wolfram.com/language/ref/Sow.html) - 撒く - 収穫 (`Reap`) されるよう、要素を撒く（`Sow`する）
   * `Reap[Do[If[PrimeQ[i], Sow[i]], {i, 1, 10}]]` -> `{Null,{2,3,5,7}}`
      * 個々で返値のリストの第1要素は、`Do` の返値の `Null`
   * `Reap[Sow[1, "o"]; Sow[2, "t"]; Sow[3, "t"]; Sow[4, "f"]; 
  Sow[5, "f"], {"a", "f", "t"}][[2]]` -> `{{}, {4,5}, {2,3}}`
   * `Reap[Do[Sow[i, Mod[i, 3]], {i, 1, 10}], {1, 2}][[2]]` -> `{{1,4,7,10}, {2,5,8}}`
      * `Sow`で要素にタグ付けして、`Reap` でタグ分けしたリストを得られる。便利。
      * タグは数字でも文字でもシンボルでもなんでも良い。

### [リストの要素](http://reference.wolfram.com/language/guide/ElementsOfLists.html)
* [`First`](http://reference.wolfram.com/language/ref/First.html) - 第1要素
   * `First[{a, b, c}]` -> `a`
* [`Last`](http://reference.wolfram.com/language/ref/Last.html) - 最終要素
   * `Last[{a, b, c}]` -> `c`
* [`Rest`](http://reference.wolfram.com/language/ref/Rest.html) - Scheme の cdr, Haskell の tail 的な？
   * `Rest[{a, b, c}]` -> `{b, c}`
* [`Most`](http://reference.wolfram.com/language/ref/Most.html) - 最終要素を取り除いたリスト
   * `Most[{a, b, c, d}]` -> `{a,b,c}`
* [`Take`](http://reference.wolfram.com/language/ref/Take.html) - 与えられた範囲にある部分リスト取り出し
   * `Take[{a, b, c, d, e}, 3]` -> `{a, b, c}` - 先頭から 3 個
   * `Take[{a, b, c, d, e}, -2]` -> `{d, e}` - 終端から 2 個
   * `Take[{a, b, c, d, e}, {2, 4}]` -> `{b, c, d}` - 先頭から 2 番目から 4 番目まで
   * `Take[{a, b, c, d, e}, {2, 5, 2}]` -> `{b, d}`
* [`Drop`](http://reference.wolfram.com/language/ref/Drop.html) - 与えられた範囲にある要素を除外したリストを返す
* [`TakeDrop`](http://reference.wolfram.com/language/ref/TakeDrop.html) - `Take`したリストと`Drop`したリストのペアを返す
* [`TakeWhile`](http://reference.wolfram.com/language/ref/TakeWhile.html) - 頭からリストを走査し、与えた述語が真を返し続ける間の部分リストを返す

#### 関連
* [`UpTo`](http://reference.wolfram.com/language/ref/UpTo.html) - 範囲の最大個数を指定する
   * `Take[{a, b}, 8]` - これはエラーを返す（与えられたリストに2(<8)つしか要素が無いため）
   * `Take[{a, b}, UpTo[8]]` -> `{a, b}`

#### 選択
* [`Select`](http://reference.wolfram.com/language/ref/Select.html) - 与えられた述語が真 `True` を返す要素を集めた部分リストを返す
   * `Select[{1, 2, 4, 7, 6, 2}, EvenQ]` -> `{2, 4, 6, 2}`
* [`SelectFirst`](http://reference.wolfram.com/language/ref/SelectFirst.html) - 与えられた述語が真を返す最初の要素を返す
   * 見つからない場合、`Missing["NotFound"]` を返す
* [`Cases`](http://reference.wolfram.com/language/ref/Cases.html) - 与えられたパターンとマッチする要素を集めた部分リストを返す
* [`FirstCase`](http://reference.wolfram.com/language/ref/FirstCase.html) - 与えられたパターンとマッチする最初の要素を返す
* [`Pick`](http://reference.wolfram.com/language/ref/Pick.html) - 与えられた「選択」リストを照会し、もう一方のリストの対応要素を取り出す
* [`DeleteCases`](http://reference.wolfram.com/language/ref/DeleteCases.html)
* [`BinLists`](http://reference.wolfram.com/language/ref/BinLists.html)
* [`Count`](http://reference.wolfram.com/language/ref/Count.html) - 与えられたパターンとマッチする要素の数を返す
* [`DeleteDuplicates`](http://reference.wolfram.com/language/ref/DeleteDuplicates.html) - 重複要素を取り除いた新しいリストを返す
* [`Nothing`](http://reference.wolfram.com/language/ref/Nothing.html) - リストから自動的に取り除かれる要素を返す
   * `{a, b, Nothing, c, d, Nothing}` -> `{a, b, c, d}`
   * `{a, b, c, d} /. c -> Nothing` -> `{a, b, d}`

### [リストの並べ替えと再構築](http://reference.wolfram.com/language/guide/RearrangingAndRestructuringLists.html)

* [`Flatten`](http://reference.wolfram.com/language/ref/Flatten.html) - リストをフラット化
   * `Flatten[{a, {b, c}, {d, e, f}}]` -> `{a, b, c, d, e, f}`
* [`Partition`](http://reference.wolfram.com/language/ref/Partition.html) - リストを要素数等で分割した部分リストのリストを返す
  * `Partition[{a, b, c, d, e, f, g}, 2]` -> `{{a, b}, {c, d}, {e, f}}`
     * 余った`g`は取り除かれていることに注意
* [`Join`](http://reference.wolfram.com/language/ref/Join.html) - リストを連結
  * `Join[{a, b}, {1, 2, 3}, {x, y}]` -> `{a, b, 1, 2, 3, x, y}`
* [`Catenate`](http://reference.wolfram.com/language/ref/Catenate.html) - リストに含まれるリストを連結
   * `Catenate[{{1, 2}, {3}, {4, {5}}}]` -> `{1, 2, 3, 4, {5}}`
* 

* [`Sort`](http://reference.wolfram.com/language/ref/Sort.html) - リストをソート
* [`ReverseSort`](http://reference.wolfram.com/language/ref/ReverseSort.html) - リストを逆順にソート

* [`Transpose`](http://reference.wolfram.com/language/ref/Transpose.html) - リストを転置
   * `Transpose[{{a, b, c}, {1, 2, 3}}]` -> `{{a, 1}, {b, 2}, {c, 3}}`
   * `{list, Range[Length[list]]}//Transpose` - こうすることで、リスト<var>list</var>の要素と位置のペアのリストを簡単に作ることが出来る。
   * 結構重要なので覚えておこう。

### [関数のリストへの適用](https://reference.wolfram.com/language/guide/ApplyingFunctionsToLists.html)
* [`Map`](https://reference.wolfram.com/language/ref/Map.html) (`/@`) - 関数を適用したリストを返す
   * `Map[f, {a, b, c}]` == `f /@ {a, b, c}` -> `{f(a),f(b),f(c)}`
* [`Scan`](https://reference.wolfram.com/language/ref/Scan.html) - リストを走査
   * <code>Scan [<var>f</var>, <var>expr</var>]</code>
   * `Module[{tmp = 1}, Scan[(tmp += #) &, {1, 2, 3}]; tmp]` -> `7`
   * `Return` を使わない限り、`Null` を返す。
* [`MapThread`](http://reference.wolfram.com/language/ref/MapThread.html) - 複数のリスト（のリスト）を取り、その要素を順にとって与えられた関数の写像を与える
   * `MapThread[f, {{a, b, c}, {x, y, z}, {1, 2, 3}}]` -> `{f[a,x,1], f[b,y,2], f[c,z,3]}`
* [`BlockMap`](http://reference.wolfram.com/language/ref/BlockMap.html) - リストの連続する要素を与えられた数だけまとめたリストにして、与えられた関数に渡した写像を返す
   * `BlockMap[f, Range[6], 2]` -> `{f[{1,2}], f[{3,4}], f[{5,6}]}`
   * `BlockMap[f, Range[4], 2, 1]` -> `{f[{1,2}], f[{2,3}], f[{3,4}]}`
* [`ArrayFilter`](http://reference.wolfram.com/language/ref/ArrayFilter.html) - 与えられた範囲にある要素を全てまとめたリストにして、与えられた関数に渡した写像を返す
   * `ArrayFilter[f, Range[3], 1]` -> `{f[{1,1,2}], f[{1,2,3}], f[{2,3,3}]}`
* [`FoldList`](http://reference.wolfram.com/language/ref/FoldList.html)
* 

### リストの述語

* [`AllTrue`](http://reference.wolfram.com/language/ref/AllTrue.html) - 与えられたリストの要素が全て、与えられた述語に対し真 `True` を返すときに限り真 `True` を返す
   * `AllTrue[{1, 2, 3}, PrimeQ]` -> `False`
   * `AllTrue[{2, 3, 5}, PrimeQ]` -> `True`
* [`AnyTrue`](http://reference.wolfram.com/language/ref/AnyTrue.html) - 与えられたリストの要素のいずれかが、与えられた述語に対し真 `True` を返すときに限り真 `True` を返す
* [`NoneTrue`](http://reference.wolfram.com/language/ref/NoneTrue.html) - 与えられたリストの要素が全て、与えられた述語に対し偽 `False` を返すときに限り真 `True` を返す
* 

## [データの配列の操作](http://reference.wolfram.com/language/guide/HandlingArraysOfData.html)

### 構造配列分析：[リストへの数学的およびカウント操作](http://reference.wolfram.com/language/guide/MathematicalAndCountingOperationsOnLists.html)

* [`Length`](http://reference.wolfram.com/language/ref/Length.html) - リストの要素数を返す
   * `Length[{a, b, c, d}]` -> `4`
* [`Total`](http://reference.wolfram.com/language/ref/Total.html) - リストの要素の総和を返す
   * `Total[{a, b, c, d}]` -> `a + b + c + d`
* [`Accumulate`](http://reference.wolfram.com/language/ref/Accumulate.html) - リストの要素を順に累積していったリストを返す
   * `Accumulate[{a, b, c}]` -> `{a, a+b, a+b+c}`
* [`Differences`](http://reference.wolfram.com/language/ref/Differences.html) - リストの要素の逐次差分リストを返す。返値リストの長さは引数リストより1減る。
   * `Differences[{a, b, c}]` -> `{b-a, c-b}`
* [`Ratios`](http://reference.wolfram.com/language/ref/Ratios.html) - リストの要素の逐次比率リストを返す。返値リストの長さは引数リストより1減る。
   * `Ratios[{a, b, c}]` -> `{b/a, c/b}`
* [`Fold`](http://reference.wolfram.com/language/ref/Fold.html)
   * `Fold[f, x, {a, b, c}]` -> `f[f[f[x, a], b], c]`
   * `Fold[f, {a, b, c}]` -> `f[f[a, b], c]`

* [`Min`](http://reference.wolfram.com/language/ref/Min.html) - リストの最小値
* [`Max`](http://reference.wolfram.com/language/ref/Max.html) - リストの最大値

### 配列の部分 > リストの要素

### [ベクトル操作](http://reference.wolfram.com/language/guide/OperationsOnVectors.html)

* [`Dot`, `.`](http://reference.wolfram.com/language/ref/Dot.html) - ベクトル、行列、テンソルのドット積を与える
   * `{a, b}.{x, y}` -> `a x + b y`
* [`Cross`, <code>&#10799;</code>](http://reference.wolfram.com/language/ref/Cross.html) - 外積（クロス積）を与える
   * <code>{a, b, c}&#10799;{x, y, z}</code> - `{b z - c y,c x - a z,a y - b x}`
* [`Norm`](http://reference.wolfram.com/language/ref/Norm.html) - ノルム
* 

## [数値データ](http://reference.wolfram.com/language/guide/NumericalData.html)

* [`Mean`](http://reference.wolfram.com/language/ref/Mean.html) - リストの平均値
   * `{1, 2, 3, 4} // Mean` -> `5/2`

### [曲線のフィットと近似の関数](http://reference.wolfram.com/language/guide/CurveFittingAndApproximateFunctions.html)

* [`FindFit`](http://reference.wolfram.com/language/ref/FindFit.html) - データとパラメータを交えた関数形を与え、最もフィットするパラメータ集合を返す
   * <code>FindFit[<var>data</var>, <var>expr</var>, <var>pars</var>,<var>vars</var>]</code>
   * <code>FindFit[<var>data</var>, {<var>expr</var>, <var>cons</var>}, <var>pars</var>, <var>vars</var>]</code> - <var>cons<var> はパラメータの制約条件
* [`Fit`](http://reference.wolfram.com/language/ref/Fit.html) - データに対し与えられた項の線型重ね合わせに対するフィッティング行い、係数を返す
* [`LeastSquares`](http://reference.wolfram.com/language/ref/LeastSquares.html) - 最小二乗問題を解く
* [`Interpolation`](http://reference.wolfram.com/language/ref/Interpolation.html) - 与えられたデータから補間関数を作成する
   * `InterpolationOrder` - 補間次数を指定する。
   * `PeriodicInterpolation` - 周期関数であることを指定する。
* [`ListInterpolation`](http://reference.wolfram.com/language/ref/ListInterpolation.html)
* [`FunctionInterpolation`](http://reference.wolfram.com/language/ref/FunctionInterpolation.html)
* [`InterpolatingFunction`](http://reference.wolfram.com/language/ref/InterpolatingFunction.html)
* [`InterpolatingPolynomial`](http://reference.wolfram.com/language/ref/InterpolatingPolynomial.html)

#### [スプライン](http://reference.wolfram.com/language/guide/Splines.html)

##### スプラインオブジェクト

* [`BezierFunction`](http://reference.wolfram.com/language/ref/BezierFunction.html)
* etc...

#### ピーク解析

* [`FindPeaks`](http://reference.wolfram.com/language/ref/FindPeaks.html) - ピークを検出し、その位置と値のペアのリスト <code>{{<var>x<sub>1</sub></var>, <var>y<sub>1</sub></var>}, {<var>x<sub>1</sub></var>, <var>y<sub>2</sub></var>}, …}</code> を返す
   * <code>FindPeaks [<var>data</var>]</code> - 与える <var>data</var> の形式は、値のリスト <code>{<var>y<sub>1</sub></var>, <var>y<sub>2</sub></var>, …}</code> 等

```Mathematica
Module[
 {values = {2, 1, 3, 5, 6, 6, 4, 3, 2, 4, 7, 3, 2, 4, 2, 2, 1},
  peaks},
 peaks = FindPeaks[values];
 ListLinePlot[values, Epilog -> {Red, PointSize[0.04], Point[peaks]}] // Print;
 ]
```

* [`EstimatedBackground`](http://reference.wolfram.com/language/ref/EstimatedBackground.html) - 与えられたデータのバックグラウンド値を推定する
   * <code>EstimatedBackground [<var>data</var>]</code>

#### 記号式を求める
* [`FindFormula`](http://reference.wolfram.com/language/ref/FindFormula.html)

## [微積分](http://reference.wolfram.com/language/guide/Calculus.html)

* [`Limit`](http://reference.wolfram.com/language/ref/Limit.html) - 極限を求める
   * `Limit[Sin[x]/x, x -> 0]` -> `1`
   * [`Direction`](http://reference.wolfram.com/language/ref/Direction.html) - 極限を上から `-1` 取るか、下から取るか `1` を指示するオプション。デフォルトでは上から。
      * `{Limit[1/x, x -> 0, Direction -> 1], Limit[1/x, x -> 0, Direction -> -1]}` -> `{+∞, -∞}`

## [離散微積分](http://reference.wolfram.com/language/guide/DiscreteCalculus.html)

* [`Sum`, <code>&#8721;</code>](http://reference.wolfram.com/language/ref/Sum.html) - 変数を動かし、その結果の総和を返す
   * `Sum[i^2, {i, 1, 10}]` -> `385`
* [`Product`](http://reference.wolfram.com/language/ref/Product.html) - 

## [初等関数](http://reference.wolfram.com/language/guide/ElementaryFunctions.html)

### [組合せ関数](http://reference.wolfram.com/language/guide/CombinatorialFunctions.html)

* [`Binomial`](http://reference.wolfram.com/language/ref/Binomial.html) - 二項係数 ${n \choose r}$, 繰り返しを許さない組合せ ${}_n C_m$
* [`Pochhammer`](http://reference.wolfram.com/language/ref/Pochhammer.html) - 繰り返しを許さない順列 ${}_n P_m$. 複素関数でもある。

## [数値関数](http://reference.wolfram.com/language/guide/NumericalFunctions.html)

### [数値的評価と精度](http://reference.wolfram.com/language/guide/NumericalEvaluationAndPrecision.html)

* [`N`](http://reference.wolfram.com/language/ref/N.html) - （0 以外の）与えられた式を型 `Real` または型 `Complex` へと変換する
   * <code>N [<var>expr</var>]</code>
   * <code>N [<var>expr</var>, <var>n</var>]</code> - <var>n</var> 桁精度で変換
   * `N[0]` -> `0.`

### [数の表現](http://reference.wolfram.com/language/guide/RepresentationOfNumbers.html)



#### 内部表現

* [`$MaxNumber`](http://reference.wolfram.com/language/ref/$MaxNumber.html)
* [`$MinNumber`](http://reference.wolfram.com/language/ref/$MinNumber.html)
* [`$MaxPrecision`](http://reference.wolfram.com/language/ref/$MaxPrecision.html)
* [`$MinPrecision`](http://reference.wolfram.com/language/ref/$MinPrecision.html)
* [`$MachinePrecision`](http://reference.wolfram.com/language/ref/$MachinePrecision.html)
* [`$MachineEpsilon`](http://reference.wolfram.com/language/ref/$MachineEpsilon.html)
* [`$MaxMachineNumber`](http://reference.wolfram.com/language/ref/$MaxMachineNumber.html)
* [`$MinMachineNumber`](http://reference.wolfram.com/language/ref/$MinMachineNumber.html)

## [フーリエ (Fourier) 解析](http://reference.wolfram.com/language/guide/FourierAnalysis.html)

### 離散フーリエ変換
* [`Fourier`](http://reference.wolfram.com/language/ref/Fourier.html) - 離散フーリエ変換
   * $v_s = \frac{1}{\sqrt{n}} \sum_{r=1}^n u_r e^{\frac{2\pi}{n} i(r-1)(s-1)}$ - 長さ <var>n</var> のリスト <var>u<sub>r</sub></var> に対する離散フーリエ変換結果 <var>v<sub>s</sub></var>
* [`InverseFourier`](http://reference.wolfram.com/language/ref/InverseFourier.html) - 離散逆フーリエ変換
   * $u_r = \frac{1}{\sqrt{n}} \sum_{s=1}^n v_s e^{\frac{-2\pi}{n} i(r-1)(s-1)}$ - 長さ <var>n</var> のリスト <var>v<sub>s</sub></var> に対する離散逆フーリエ変換結果 <var>u<sub>r</sub></var>

## [統計的データ解析](https://reference.wolfram.com/language/guide/Statistics.html)

### ランダムサンプリング：[乱数の生成](https://reference.wolfram.com/language/guide/RandomNumberGeneration.html)

* [`RandomInteger`](https://reference.wolfram.com/language/ref/RandomInteger.html)
* [`RandomReal`](https://reference.wolfram.com/language/ref/RandomReal.html)
   * <code>RandomReal []</code> - 区間[0,1]の一様乱数
   * <code>RandomReal [{<var>x<sub>min</sub></var>, <var>x<sub>max</sub></var>}]</code>
   * <code>RandomReal [<var>x<sub>max</sub></var>]</code>
* etc,...


* [`RandomVariate`](https://reference.wolfram.com/language/ref/RandomVariate.html) - 与えられた確率分布に従う疑似乱数、またはそのリストを返す
   * `RandomVariate[UniformDistribution[]]` -> `0.406173`
   * `RandomVariate[NormalDistribution[], 10^5]//Histogram`
* [`RandomPoint`](https://reference.wolfram.com/language/ref/RandomPoint.html) - 与えられた領域に一様に分布する疑似乱数、またはそのリストを返す
* etc,...


* [`SeedRandom`](https://reference.wolfram.com/language/ref/SeedRandom.html) - 疑似乱数の種を与える
   * <code>SeedRandom [<var>n</var>]</code> - 乱数の種 <var>n</var> は数字でも文字でもなんでも良い
   * <code>SeedRandom [Method->"<var>method</var>"]</code> - 疑似乱数生成アルゴリズムを指定することも出来る
* [`BlockRandom`](https://reference.wolfram.com/language/ref/BlockRandom.html) - 乱数生成のための内部状態を局所化する
   * `{BlockRandom[{BlockRandom[RandomReal[]], RandomReal[]}], RandomReal[]}` -> `{{0.876171, 0.876171}, 0.876171}`

#### [パラメトリック統計分布](https://reference.wolfram.com/language/guide/ParametricStatisticalDistributions.html)

* [`NormalDistribution`](https://reference.wolfram.com/language/ref/NormalDistribution.html) - 正規分布
* [`UniformDistribution`](https://reference.wolfram.com/language/ref/UniformDistribution.html) - 一様分布
* [`GeometricDistribution`](http://reference.wolfram.com/language/ref/GeometricDistribution.html) - 幾何分布
   * `RandomInteger[GeometricDistribution[2/3], 12000] // Histogram` - 得られる変数が 1 増加するごとに 1-2/3 = 1/3 となることが分かる。

## [並列計算](http://reference.wolfram.com/language/guide/ParallelComputing.html)

* [`Parallelize`](http://reference.wolfram.com/language/ref/Parallelize.html)
* [`ParallelTry`](http://reference.wolfram.com/language/ref/ParallelTry.html) - 並列計算し、最初に得た結果を返す

### 計算の設定とブロードキャスト

* [`ParallelEvaluate`](http://reference.wolfram.com/language/ref/ParallelEvaluate.html) - 与えた式を全並列サブカーネルで評価し、結果をリストにして返す
   *  <code>ParallelEvaluate [<var>expr</var>]</code>
   * `ParallelEvaluate[$KernelID]` -> `{1,2,3,4}`

### [並列計算の設定](http://reference.wolfram.com/language/guide/ParallelComputationSetupAndConfiguration.html)

### [データの並列化](http://reference.wolfram.com/language/guide/DataParallelism.html)

* [`ParallelMap`](http://reference.wolfram.com/language/ref/ParallelMap.html)
* [`ParallelTable`](http://reference.wolfram.com/language/ref/ParallelTable.html)
* [`ParallelDo`](http://reference.wolfram.com/language/ref/ParallelDo.html)
* [`ParallelSum`](http://reference.wolfram.com/language/ref/ParallelSum.html)
* [`ParallelProduct`](http://reference.wolfram.com/language/ref/ParallelProduct.html)
* [`ParallelArray`](http://reference.wolfram.com/language/ref/ParallelArray.html)
* [`ParallelCombine`](http://reference.wolfram.com/language/ref/ParallelCombine.html)

### 並行性制御：[並行性](http://reference.wolfram.com/language/guide/Concurrency.html)

#### 並行評価
* [`ParallelSubmit`](http://reference.wolfram.com/language/ref/ParallelSubmit.html)
* [`WaitAll`](http://reference.wolfram.com/language/ref/WaitAll.html)
* [`WaitNext`](http://reference.wolfram.com/language/ref/WaitNext.html)
* [`EvaluationObject`](http://reference.wolfram.com/language/ref/EvaluationObject.html)

### [並列計算の設定](http://reference.wolfram.com/language/guide/ParallelComputationSetupAndConfiguration.html)

* [`$KernelCount`](http://reference.wolfram.com/language/ref/$KernelCount.html) - 現在起動中のサブカーネルの数
* [`Kernels`](http://reference.wolfram.com/language/ref/Kernels.html) - 現在起動中の並列サブカーネルのリスト
* [`$KernelID`](http://reference.wolfram.com/language/ref/$KernelID.html) - 呼出された並列サブカーネルのID
   * `ParallelDo[Print[$KernelID, ":", i], {i, 1, 6}]`

### マルチプロセッサおよびマルチコアの計算

* [`Compile`](http://reference.wolfram.com/language/ref/Compile.html)
   * <code>Compile [{<var>x<sub>1</sub></var>, <var>x<sub>2</sub></var>, …}, expr]</code>
   * <code>Compile [{{<var>x<sub>1</sub></var>, <var>t<sub>1</sub></var>}, …}, expr]</code> - （引数の）型指定。ここで <var>t<sub>i</sub></var> は `_Integer`, `	_Real`, `	_Complex`, `True | False`
   * <code>Compile [{{<var>x<sub>1</sub></var>, <var>t<sub>1</sub></var>, <var>n<sub>1</sub></var>}, …}, expr]</code> - （引数の）リスト型指定。<var>x<sub>i</sub></var> が <var>t<sub>i</sub></var> 型の <var>n<sub>i</sub></var> 次元配列であることを宣言する。
   * <code>Compile [<var>vars</var>, <var>expr</var>, {{<var>p<sub>1</sub></var>, <var>pt<sub>1</sub></var>}, …}]</code> - （本体の）型指定。式 <var>expr</var> に現れる部分式 <var>p<sub>i</sub></var> が、<var>pt<sub>i</sub></var> 型であることを宣言する
   * `Compile[{{a, False | True}}, !a] // #[True] &` -> `False`
   * [`Parallelization`](http://reference.wolfram.com/language/ref/Parallelization.html) - `Compile`のオプション。並列可能にすべきかを指定する

## [調整とデバッグ](http://reference.wolfram.com/language/guide/TuningAndDebugging.html)

* [`Monitor`](http://reference.wolfram.com/language/ref/Monitor.html) - 更新される変数の値をリアルタイムに追跡、表示する
   * `Block[{tmp = 0}, Monitor[Do[Pause[0.5]; tmp += i, {i, 10}], tmp]]`
* [`EvaluationData`](http://reference.wolfram.com/language/ref/EvaluationData.html)
* [`Echo`](http://reference.wolfram.com/language/ref/Echo.html) - 中間結果を表示する。ラベルを付けたりも出来る。
   * <code>Echo [<var>expr</var>]</code> - <var>expr</var> を表示し、<var>expr</var> を返す
   * <code>Echo [<var>expr</var>, <var>label</var>]</code> - <var>expr</var> に <var>label</var> のラベルを付けて表示し、<var>expr</var> を返す
   * <code>Echo [<var>expr</var>, <var>label</var>, <var>f</var>]</code> - <var>f</var>[<var>expr</var>] に <var>label</var> のラベルを付けて表示し、<var>expr</var> を返す
* [`EchoFunction`](http://reference.wolfram.com/language/ref/EchoFunction.html) - `Echo` の演算子型
   * <code>EchoFunction [<var>f</var>][<var>expr</var>]</code>
   * <code>EchoFunction [<var>label</var>, <var>f</var>][<var>expr</var>]</code>
* [`PrintTemporary`](http://reference.wolfram.com/language/ref/PrintTemporary.html) - 与えられた式を、入力行が評価中の間だけ表示する。
   * `PrintTemporary["evaluating now..."]; Pause[2]; "Done."`
* [`Dialog`](http://reference.wolfram.com/language/ref/Dialog.html)

### アサーション

* [`Assert`](http://reference.wolfram.com/language/ref/Assert.html) - アサーション
   * <code>Assert [<var>test</var>]</code>
   * <code>Assert [<var>test</var>, <var>tag</var>]</code>
   * `On[Assert]` しないと機能しないので注意
* [`$AssertFunction`](http://reference.wolfram.com/language/ref/$AssertFunction.html) - アサーションに失敗した場合に呼出される関数

### [メッセージ](http://reference.wolfram.com/language/guide/Messages.html)

* [`Quiet`](http://reference.wolfram.com/language/ref/Quiet.html) - 与えられた式を「静かに」評価する（メッセージを表示しない）
* [`Off`](http://reference.wolfram.com/language/ref/Off.html) - メッセージの表示を大域的に抑制にする
   * <code>Off [<var>symbol</var>::<var>tag</var>]</code>
   * <code>Off ["<var>name</var>"]</code>
* [`On`](http://reference.wolfram.com/language/ref/On.html) - メッセージの表示をオンにする

### [時間の測定と最適化](http://reference.wolfram.com/language/guide/TimeMeasurementAndOptimization.html)

* [`TimeConstrained`](http://reference.wolfram.com/language/ref/TimeConstrained.html) - 与えられた時間だけ、式の評価を行う
   *  <code>TimeConstrained [<var>expr</var>, <var>t</var>]</code>
   *  <code>TimeConstrained [<var>expr</var>, <var>t</var>, <var>failexpr</var>]</code>

### [メモリの計測と最適化](http://reference.wolfram.com/language/guide/MemoryMeasurementAndOptimization.html)

* [`ByteCount`](http://reference.wolfram.com/language/ref/ByteCount.html)
* [`MemoryConstrained`](http://reference.wolfram.com/language/ref/MemoryConstrained.html) - 指示された量以上のメモリが要求された場合に処理を中断する
* [`MemoryInUse`](http://reference.wolfram.com/language/ref/MemoryInUse.html) - 現在使用中のメモリ量

#### 時間測定

* [`Timing`](http://reference.wolfram.com/language/ref/Timing.html) - 与えられた式を評価し、そのCPUタイム（秒）と評価結果をリストにして返す
* [`RepeatedTiming`](http://reference.wolfram.com/language/ref/RepeatedTiming.html) - くり返し実行し、平均CPUタイム（秒）と評価結果をリストにして返す
* [`AbsoluteTiming`](http://reference.wolfram.com/language/ref/AbsoluteTiming.html) - 実際の経過時間版

#### 時間取得

* [`TimeUsed`](http://reference.wolfram.com/language/ref/TimeUsed.html) - 現行のWolframシステムが起動してからの秒数
* [`SessionTime`](http://reference.wolfram.com/language/ref/SessionTime.html)
* [`AbsoluteTime`](http://reference.wolfram.com/language/ref/AbsoluteTime.html)
* [`$TimeUnit`](http://reference.wolfram.com/language/ref/$TimeUnit.html) - 記録される時間の最小幅を秒で返す

## プロット
### オプション

#### プロット

* [`PlotPoints`](http://reference.wolfram.com/language/ref/PlotPoints.html)
* [`MaxRecursion`](http://reference.wolfram.com/language/ref/MaxRecursion.html)

#### グラフィック
* [`ImageSize`](https://reference.wolfram.com/language/ref/ImageSize.html) - 横幅、高さ等サイズを指定

### [グラフィックス指示子](http://reference.wolfram.com/language/guide/GraphicsDirectives.html)

#### 線と矢印
* [`AbsoluteThickness`](http://reference.wolfram.com/language/ref/AbsoluteThickness.html) - 線の絶対的太さを指定
   * `Plot[x^2, {x,0,5}, PlotStyle->AbsoluteThickness[0.5]]`

## [ユーザインターフェース構成とレイアウト](https://reference.wolfram.com/language/guide/UserInterfaceStructuringAndLayout.html)

### 注釈構造>>[コントロールオブジェクト](https://reference.wolfram.com/language/guide/ControlObjects.html)

* [`Slider`](https://reference.wolfram.com/language/ref/Slider.html)
* [`ProgressIndicator`](https://reference.wolfram.com/language/ref/ProgressIndicator.html) - インジケーターを与える
   * <code>ProgressIndicator [<var>x</var>]<code> - 区間[0,1]における <var>x</var> の進捗状況を表示
   * <code>ProgressIndicator [Dynamic[<var>x</var>]]<code>
   * <code>ProgressIndicator [<var>x</var>, {<var>xmin</var>, <var>xmax</var>}]<code>

## [インタラクティブな操作](https://reference.wolfram.com/language/guide/InteractiveManipulation.html)

* [`Manipulate`](https://reference.wolfram.com/language/ref/Manipulate.html)
   * <code>Manipulate [<var>expr</var>, {<var>u</var>, <var>u<sub>min</sub></var>, <var>u<sub>max</sub></var>}]</code>
   * <code>Manipulate [<var>expr</var>, {<var>u</var>, <var>u<sub>min</sub></var>, <var>u<sub>max</sub></var>, <var>du</var>}]</code>
   * <code>Manipulate [<var>expr</var>, {{<var>u</var>,<var>u<sub>init</sub></var>}, <var>u<sub>min</sub></var>, <var>u<sub>max</sub></var>, …}]</code>
   * `Manipulate[Plot[Sin[x (1 + a x)], {x, 0, 6}], {a, 0, 2}]`

## [開発者ユーティリティパッケージ](https://reference.wolfram.com/language/Developer/guide/DeveloperPackage.html) <code>Developer`</code>

* `Needs["Developer`"]`

### [パックアレー関数](http://reference.wolfram.com/language/tutorial/LinearAlgebraPerformance.html.ja#995975105)

* [`ToPackedArray`](https://reference.wolfram.com/language/Developer/ref/ToPackedArray.html) - 可能な場合、与えられたリストの内部表現をパックアレーにする
   * <code>ToPackedArray [<var>expr</var>]</code>
   * <code>ToPackedArray [<var>expr</var>, <var>type</var>]</code> - 可能な <var>type</var> は `Integer`,`Real`, `Complex` 等
   * `Range[0, 10] // ToPackedArray`
* [`FromPackedArray`](https://reference.wolfram.com/language/Developer/ref/FromPackedArray.html) - パックアレーを非パックアレーへと変換する。非パックアレーが与えられた場合はそのまま返す。
* [`PackedArrayQ`](https://reference.wolfram.com/language/Developer/ref/PackedArrayQ.html) - 与えられたリストの内部表現がパックアレーであるか否か
   * 確認できる型は `Integer`, `Real`, `Complex` のいずれか。

* `On["Packing"]` - パックアレーがアンパックされるときに警告を発する

## その他リンク
* [入出力の表記法](http://reference.wolfram.com/language/tutorial/FormsOfInputAndOutput.html) - `FullForm`, `InputForm`, `OutputForm`, `StandardForm`
* [数の型](http://reference.wolfram.com/language/tutorial/TypesOfNumbers.html)
* [SymbolicCユーザガイド](http://reference.wolfram.com/language/SymbolicC/tutorial/Overview.html)

### パフォーマンス
* [線形代数計算のパフォーマンス](http://reference.wolfram.com/language/tutorial/LinearAlgebraPerformance.html.ja)
* [メモリ管理](http://reference.wolfram.com/language/tutorial/MemoryManagement.html) - 
* 

#### メモ化
* [hirax.net::お気楽・超簡単なMathematicaのメモ化（memoization）関数作成テクニック](http://www.hirax.net/diaryweb/2012/02/21.html)

```Mathematica
In[39]:= AbsoluteTiming[Module[{fib},
  fib[1] = 1;
  fib[2] = 1;
  fib[n_] := fib[n - 1] + fib[n - 2];
  fib[30]]]

Out[39]= {1.40604,832040}

In[41]:= AbsoluteTiming[Module[{fib},
  fib[1] = 1;
  fib[2] = 1;
  fib[n_] := fib[n] = fib[n - 1] + fib[n - 2];
  fib[30]]]

Out[41]= {0.000204,832040}
```

### メモ
* [why ParallelMapThread does not exist?](https://mathematica.stackexchange.com/questions/11833/mapthread-and-parallel-computing)