(* 関数の定義例(1) 二乗の計算を行う関数 mySquare を定義する mySqure(x) = x * x *) mySquare[x_] := x * x (* 関数の定義がうまくいっていることを確認する *) mySquare[3] (* 普通に文字列の計算もすることも確認 *) Expand[mySquare[x+3]] (* 表を利用した関数の定義例(2) 次の表に対応した関数を定義する x | 0 | 1 | その他 | --------+---+---+--------+ next[x] | 1 | 2 | 0 | *) next[0] = 1 (* next[0] := 0 とやってもよいが意味がない *) next[1] = 2 next[_] = 0 (* 「その他」の表現として「_」を利用 *) (* 値を確認する *) next[0] next[1] next[2] (* 「_」は数値以外にもマッチする 引数は先に計算してから、表が引かれる *) next[x] next[3-2] (* 再起的(帰納的)定義の利用 関数の定義の右辺に、自分自身を利用することができる →再起的定義 次の二つの原則が必要 [1] 最も単純な場合の値が再起を使わずに定義されている [2] 再起を利用する定義の場合は、引数の形が「単純になる」事 階乗の再起的定義の例 1 ( n <= 1 の時 ) : 最も単純な場合 n! = { n * ((n-1)!) ( その他の時 ) : 再起定義の利用(引数が一減る) [注意] n が 1 の時が最も「単純」で、 n が小さいほど「単純」とした場合 *) fib[1] = 1 fib[n_] := n * fib[n-1] (* fib[6] の計算 *) fib[6] (* 等差数列(初項 2, 公差 3)の二つの定義形式 明示的な定義 a_n = 2 + 3 * ( n - 1) 再起を利用した定義 b_1 = 2 b_{n+1} = b_n + 3 *) a[n_] := 2 + 3 * ( n - 1 ) b[1] = 2 b[n_] := b[n-1] + 3 (* 確認 *) a[10] b[10] (* 漸化式による数列の定義 フィボナッチ数列 *) fib[0] = 1 fib[1] = 1 fib[n_] := fib[n-1] + fib[n-2] (* 実行例 *) fib[0] fib[1] fib[2] fib[3] fib[4] fib[5] fib[6]