Mathematicaプログラミング

■ 記述例

具体的な記述例を示していきます。

なんだかんだいってサンプルコードが一番わかりやすい様で。

リストの値の和を計算

リスト「{5, 3, 2, 4}」の和を計算します。

ループ文を用いた手法

foo = {5, 3, 2, 4}

sum[list_] := Module[{
  len = Length[list],
  sum = 0,
  i
},
  For[i=1, i<=len, i+=1,
    sum += list[[i]]];
  sum
]

sum[foo]

ループを用いて一つづつ足していっています。

「Module」は局所変数を作成するための関数です。 ここでは、「len」「sum」「i」の3つの局所変数を定義しています。

関数の最後に評価されたもの(ここではsum)が戻り値となります。

MathematicaではForやWhile等はなるべく使わずに、 FoldやMap等を使って記述した方がすっきりすることが多いので、 なるべくForやWhile等は使わないようにすることを勧めます。

再帰関数の利用

foo = {5, 3, 2, 4}

sum[list_]          := sum[list, 0]
sum[{}, s_]         := s
sum[{h_, t___}, s_] := sum[{t}, h+s]

sum[foo]

「h_」はリストの先頭を、「t___」はリストの残りの要素を指します。

再帰させるときに

sum[{t}, h+s]

のようにして「t」を渡しますが、 この際「t」を「{}」で囲まないと正しく動作しません。 囲むことを忘れてないようにしてください。

Fold関数の利用

foo = {5, 3, 2, 4}

sum[list_] := Fold[Plus, 0, list]

sum[foo]

ここでは、関数型言語でおなじみのfold関数を利用しています。

なお、処理の方向はリストの左から(fold-left)となります。

Apply関数の利用

foo = {5, 3, 2, 4}

sum[list_] := Plus @@ list

sum[foo]

リスト構造のヘッドである「List」を 「@@」を使用し、ヘッドを「Plus」に書き換えることで リストの要素の和を計算させています。