本書では、主に有料ソフト「Mathematica」で用いられる「Wolfram言語」のインタラクティブ実行環境を無料で構築し、研究開発やクリエイティブなどに役立つ技術を紹介します。
Wolfram言語はとても強力なプログラミングをできる環境ですが、それを実行するためのソフトウェア「Mathematcia」は数万円、あるいは数十万円かかるため、導入以前に挫折するケースが大変多いです。
無料で構築できる秘訣は、Mathematicaの開発元であるWolfram社が「Wolfram Engine」(Wolfram言語を実行できるコア機能)を無料で提供していることがまず第一です。Wolfram Engineを動かすコマンドラインプログラム「WolframScript」は、ユーザーインターフェースについてはGUIの統合開発環境としても優れたMathematicaには劣ります。しかし、グラフィックスとの連動も優れたオープンソース技術「Jupyter Notebook」の機能に加え、Microsoft社が無償で配布しているコードエディター「Visual Studio Code」(略称: VSCode)でノートブック管理ができるので、使用感はMathematicaのノートブック作成にかなり近づきます。
Wolfram言語は元々はウルフラム・リサーチ社の創始者であるスティーブン・ウルフラム氏らが1988年にリリースした数式処理システム「Mathematica」というソフトウェアから始まり、現在でもWolfram Mathematicaは販売され続けています。
Mathematicaというのはソフトウェアの名称で、言語としてはWolfram言語という名称が正式なものとなります 1。
Wolfram言語の素晴らしいところは、6000個近くの組み込み関数がある充実した環境で、特にグラフィカルな入出力がとても優れているところです。
最近では機械学習やデータサイエンス、ブロックチェーンなどの新技術も取り入れています。
本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
第2章でWolfram Engineを入れて動作確認をしたい方、ノートブック環境を整える途中でつまずいてしまった方、一旦ここで遊んでみましょう。
Webで試したい場合は「Wolfram|Alpha」というサイトにアクセスすれば、事前準備なしである程度体感できます(ただし完全な互換性はないので注意)。
それではよく出てくる例で
100!
を実行してみましょう。
ほとんど待たされることなく
9332621544394415268169923885626670049071596826438162146859296389521759\
9993229915608941463976156518286253697920827223758251185210916864000000\
000000000000000000
と答えが出てきます。32ビットとか64ビットとか、関係のない厳密値計算ができます。
ノートブック環境で式入力してEnterで結果が出ると思いきや、そうはいきません。実行するにはShift+Enterです(※WolframScriptの場合はEnterで実行)。
Enterキーは単なる改行です。ひとつのテキストエリア(「セル」と呼びます)に複数行の命令を詰め込めるので、セルを入力し終わったらShift+Enterを押しましょう。
結果として0を出力するつもりで、次の式を実行してみましょう。
sin(2pi)
もう一度言いますが、EnterではなくShift+Enterで実行します。
結果は
2 pi sin
括弧が外れて順番が並び変わっただけですね。
実はここでは、3つの間違いを犯しています。
円周率πを表す定数はPiです。基本的に、Wolfram言語が予め用意している定数は大文字で始まります。
正弦関数sinを表す関数はSinです。関数名も、組み込みのものは大文字で始まります。よくあるプログラミング言語では、クラスと関数を区別するために大文字・小文字を使い分けていますが、そのあたりのルールが違うのがつまずきやすいポイントです。
慣習的に、自分で定義する関数や定数は小文字で始めることになっています。
正弦関数に代入するときは
Sin(x)
ではなく
Sin[x]
です。
多くのプログラミング言語では"( )"を用いるので、これが一番直感的でないかもしれません。
Sin[2Pi]
これで無事、0が出力されます。