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」に書き換えることで リストの要素の和を計算させています。