2012-01-26[n年前へ]
■続々?Mathematica機能を使うIronRubyコードを書いてみる
数式処理ソフトであるMathematicaの機能をIronRuby(.NetによるRuby実装)から使うRubyコードを少し書き直してみました(mathruby.rb)。具体的には、Mathematicaの計算カーネルと「やりとり」をする通訳部分に、Mathematicaから得られた値をRuby側のクラス(Array,String,Numeric 等)に自動変換するコードを付け足してみました。
このRubyスクリプトを実行するディレクトリに"Wolfram.NETLink.dll"(ここからダウンロードできるファイルを展開した中にあります)を放り込んで、たとえばこんな「2次方程式の解を求めよ」というコードを書くと、そして、そのRubyスクリプトをIronRubyから実行すると、
pp 'x^2 == 3'.Solve 'x'次のように答が得られます。
[["x -> -Sqrt[3]"], ["x -> Sqrt[3]"]]Mathematicaの計算カーネルからRubyが得る答は、もちろんRubyのArrayクラスのオブジェクトです。2次方程式の解ですから、要素が2個の配列が返されています。
あるいは、 pp [1,2,3].Sin.N というコード、つまり、配列[1,2,3]のそれぞれに「Sin関数を適用した上で、”数値化”せよ」という命令を書けば、
[0.841470984807897, 0.909297426825682, 0.141120008059867]という「数値」クラスのArray(配列)が得られます。
違う言語の間を「繋ぎ」を作ろうとすると、それぞれの特徴(売り)・個性・違いを(ほんの少しだけ)垣間見ることができるような気がして、何だか少し面白いもののです。
上記コードの動作確認は、Windows上で行っています。.Net実装であるmonoを動かしたOSX では、monoの正規表現動作不具合などにより、上記コードは動作しません(2012/01/28現在)。