Wolfram Language ( / ˈ w ʊ l f r əm / WUUL -frəm ) は、 Wolfram Researchが開発した独自の[ 7 ]高水準マルチパラダイムプログラミング言語[ 8 ]です。記号計算、関数型プログラミング、ルールベースプログラミング[ 9 ]を重視し、任意の構造とデータを使用できます[ 9 ] 。これは、数式処理プログラムMathematica [ 10 ]のプログラミング言語です。
Wolfram言語は、1988年のMathematicaの初期バージョンの一部でした。[ 11 ]
エンジンの記号的な側面により、これはコンピュータ代数システムとなっています。この言語は、一連のルールを使用して、積分、微分、行列操作、微分方程式の解法を実行できます。また、初期バージョンでは、ノートブックモデルと、セオドア・グレイの特許に従って音声や画像を埋め込む機能が導入されました。 [ 12 ]
Wolframは、3Dモデリングなどのより複雑なタスクのための機能も追加した。[ 13 ]
2013年に、Wolfram ResearchがRaspberry Piユーザー向けに言語エンジンのバージョンを無料にすることを決定し、その名前を考案する必要があったため、最終的に言語の名前が採用されました。[ 14 ]これは、Raspberry Pi Foundationが初心者向けに提供する推奨ソフトウェアバンドルに含まれていましたが、Wolfram言語の独自性のため、いくつかの論争を引き起こしました。[ 15 ]ボードがCES 2014で発表された後、Wolfram言語をIntel Edisonに移植する計画が発表されましたが、リリースされませんでした。[ 16 ] 2019年には、WolframライブラリをUnityゲームエンジンと互換性を持たせるためのリンクが追加され、ゲーム開発者が言語の高レベル関数にアクセスできるようになりました。[ 17 ] [ 18 ]
Wolfram Languageの構文は、全体的に1960年代のLISPのM式に似ており、中置演算子と「関数表記」による関数呼び出しをサポートしています。
Wolfram Languageで「Hello, World!」と出力するには、以下のコードを使用します。
[ 「こんにちは、世界!」と印刷]Wolfram言語は、中置演算子を使用して基本的な算術式を記述します。
(※これはコメントです。)4 + 3 (* = 7 *)1 + 2 * ( 3 + 4 ) (* = 15 *) (* 乗算は省略できます: 1 + 2 (3 + 4) *)(* 割り算の結果は有理数になります: *) 6 / 4 (* = 3/2 *)関数呼び出しは角括弧で表されます。
sin [ Pi ] (* = 0 *)(* これは有理数を浮動小数点数に変換する関数です。 *) N [ 3 / 2 ] (* = 1.5 *)リストは中括弧で囲みます。
奇数リスト= { 1 , 3 , 5 } (* = {1,3,5} *)表現をより人間にとって分かりやすい形で示す代替手段がある場合、言語はM表現パラダイムから逸脱する可能性がある。
TeXFormこの言語では、組版式やInputForm言語入力など、さまざまな書式設定規則が使用されます。@と後置式を使用して適用することもできます//。'。フォーマッタFullFormは入力をデシュガーします: [ 19 ]
完全形式[ 1 + 2 ] (* = Plus[1, 2] *)カレー調理は推奨されています。
Wolfram言語の関数は、実質的に置換のための単純なパターンの一例である。
F [ x_ ] := x ^ 0は:=「SetDelayed演算子」なので、xはすぐには検索されません。x_は の構文糖衣Pattern[x, Blank[]]、つまり、残りの評価でxを置き換える任意の値のための「空白」です。
バブルソートの反復処理は次のように表されます。
sortRule := { x___ , y_ , z_ , k___ } /; y > z -> { x , z , y , k } (* Rule[Condition[List[PatternSequence[x, BlankNullSequence[]], Pattern[y, Blank[]], Pattern[z, Blank[]], PatternSequence[k, BlankNullSequence[]]], Greater[y, z]], List[x, z, y, k]] *)演算子/;は「条件」なので、ルールは の場合にのみ適用されますy>z。3 つのアンダースコアは の構文でBlankNullSequence[]、null になる可能性のあるシーケンスを表します。
ReplaceRepeated//.演算子を使用すると、変更が発生しなくなるまでこのルールを繰り返し適用できます。
{ 9 , 5 , 3 , 1 , 2 , 4 } // . sortRule (* = ReplaceRepeated[{ 9, 5, 3, 1, 2, 4 }, sortRule] *) (* = {1, 2, 3, 4, 5, 9} *)パターンマッチングシステムは、ルールベースの統合と導出を容易に生み出します。以下は、Rubi パッケージのルールからの抜粋です。[ 20 ]
(* 逆数ルール *) Int [ 1 / x_ , x_Symbol ] := Log [ x ]; (* べき乗ルール *) Int [ x_ ^ m_ . , x_Symbol ] := x ^ ( m + 1 ) / ( m + 1 ) /; FreeQ [ m , x ] && NeQ [ m , -1 ]Wolfram Language の公式かつ参照実装は、Mathematica および関連するオンライン サービスにあります。これらはクローズド ソースです。[ 21 ]ただし、Wolfram Research は、オープンソースのMIT ライセンスの下で言語のパーサーを公開しています。[ 22 ]このパーサーは元々C++で開発されましたが、2023 年にRustで書き直されました。参照書籍はオープン アクセスです。[ 23 ]
Wolfram言語が30年以上にわたって存在してきた中で、多くのオープンソースのサードパーティ実装も開発されてきました。 1991年のRichard FatemanによるMockMMAは、最も初期の再実装であることと、Wolframから使用停止命令を受けたことの両方で歴史的に注目すべきものです。 2020年4月現在もメンテナンスされている最新の実装もあります。 Javaの Symja 、 Golangの expreduce 、SymPyベースの Mathics などが含まれます。[ 24 ]これらの実装は、Wolfram のオンライン「知識ベース」機能ではなく、コア言語とそれが意味するコンピュータ代数システムに焦点を当てています。
2019年に[ 25 ] Wolfram Researchは、非商用ソフトウェアのプログラミングライブラリとして使用できるフリーウェアのWolfram Engineをリリースしました。この開発者専用のエンジンは、Mathematica評価器のコマンドラインシェル(カーネルの数は限られている)を提供し、Web経由でのサインアップとライセンス認証が必要です。無料で利用できるJupyter Notebook/Labプロジェクトは、ノートブックをさまざまな言語に接続するためのプロトコル(ZMQ)を提供しており、これはWolfram Kernel for Jupyterを介してテキストのみのCLIインターフェースの代替として利用できます。[ 26 ]
この言語は2013年6月に正式に命名され、30年以上にわたりMathematicaやその他のWolframテクノロジーのバックエンドとして使用されてきました。[ 27 ] [ 28 ]