hirax.net::inside out::2012年01月26日

最新記事(inside out)へ  |   年と月を指定して記事を読む(クリック!)

2011年12月 を読む << 2012年1月 を読む >> 2012年2月 を読む

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現在)。