マルチパラダイムと一つの言語
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/09 07:13 UTC 版)
「Mathematica」の記事における「マルチパラダイムと一つの言語」の解説
Mathematicaはマルチパラダイム・プログラミング言語であり、一つの問題に対して複数のアプローチを取ることが可能である。 ここでは簡単な例として、最大公約数 GCD(x, y) のテーブルを作る問題を考える(ここで、1 ≤ x ≤ 5、1 ≤ y ≤ 5 とする)。これには、少なくとも次の4つのアプローチが考えられる。 1. 関数型のアプローチ: In[3]:= Array[GCD, {5, 5}]Out[3]= {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}} このアプローチは、表現が抽象的ではあるが、組み込み関数の性能を十分に引き出しており、簡潔で計算速度も速い。Array は引数として任意の関数を許容する(名前があるかどうかを問わない)ので、スロット #n を使って、& の後に対応する関数を記述することができる。したがって、上記の関数は Array[GCD[#1, #2]&, {5, 5}] とも記述できるが、Mathematicaではそれを上記のように省略してもよいようになっている。 2. APL 的なアプローチ: In[5]:= Outer[GCD, Range[5], Range[[5]]Out[5]= {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}} ここで、Outer とRange はそれぞれ APL の外積演算子とイオタ演算子に対応している。Outer も Array と同様、引数として任意の関数を許容する。 3. Table を使うアプローチ: In[4]:= Table[GCD[x, y], {x, 1, 5}, {y, 1, 5}]Out[4]= {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}} Table は任意の次元の表を作るのに使われる標準的な関数である。このアプローチは、GCD の取る引数が明示的で、直感的に理解しやすい。反面、上記1・2に比べると計算速度で若干劣る。 4. 手続き型のアプローチ: In[6]:= lst1 = {}; (* 空のリストを初期化 *) For[i = 1, i <= 5, i++, lst2 = {}; For[j = 1, j <= 5, j++, lst2 = Append[lst2, GCD[i, j]] ]; lst1 = Append[lst1, lst2]; (* 部分リストを繋ぐ。これが行となる *) ]; lst1Out[6]= {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}} これは C 言語や FORTRAN などで馴染み深いアプローチである。しかし、組み込み関数を使った場合(上記1~3)に比べるとコードが冗長である。また、手続き型のアプローチは計算速度が遅くボトルネックになりやすいので、注意が必要である。 以上の例で見たように、Mathematicaプログラミングにおいては、組み込み関数を最大限に利用することが非常に重要である。Mathematicaの組み込み関数を有効に使うことで、問題を簡潔に表現することができる。また、Mathematicaの組み込み関数は、適切なアルゴリズムを用い、高度に最適化され、かつC言語で実装されているため、同じ機能を持つユーザー定義関数に比べて計算速度が圧倒的に速い。
※この「マルチパラダイムと一つの言語」の解説は、「Mathematica」の解説の一部です。
「マルチパラダイムと一つの言語」を含む「Mathematica」の記事については、「Mathematica」の概要を参照ください。
- マルチパラダイムと一つの言語のページへのリンク