無事に卒研発表もおわり、とりあえず余裕ができました。

今回はIronSchemeというライブラリの紹介をします。
IronSchemeはIronRubyやIronPythonなどと同様にDLR上で動作する、Schemeの実装です。
CodePlexにプロジェクトがあります。
http://ironscheme.codeplex.com/  

導入方法は、まず上のページの右側のDownloadからインストーラをダウンロードそしてインストール。
 デスクトップにショートカットが作成されるので、それでコンソールのインタプリタが起動します。

 ironschemeConsole

普通にSchemeができます。まぁ僕あまりSchemeできないんですけどね。
.NET Frameworkのライブラリにアクセスしてフォームを作ったりとかもできるようですが
僕はうまくできませんでした。そっちの紹介してる人もいるみたいなので調べてみてください。

C#からIronSchemeを実行する方法を紹介します。
インストール先にはいくつかdllがありますがとりあえず参照するのはIronScheme.dllだけでいいです。
そして
using IronScheme;
と書けばstringの拡張メソッドとしてEvalというメソッドが使えます。
Schemeの式を書いた文字列でEvalを実行することで結果がobjectとして返ってきます。
Console.WriteLine(Console.ReadLine().Eval());
こんな感じで使えます。
ironschemeConsole2


"(+ {0} {1})".Eval(1, 2);
このようにSchemeの式の引数をC#側でEvalメソッドの引数に渡すこともできます。
リストだとかその他文字列に表せないデータはこの方法で使うことになります。
例えば以下の例。
var environment = "(new-interaction-environment)".Eval();
var builtInSymbols = "(environment-symbols {0})".Eval<Cons>(environment);
Console.WriteLine(builtInSymbols.PrettyPrint);
Consはリストを表すクラスで、IronScheme.Runtime名前空間にあります。
(new-interaction-environment)ではデフォルトの環境を取得できます。
(environment-symbols env )でenvで定義されているシンボル一覧を取得します。
Evalメソッドにはジェネリックに対応したものもあり、指定した型で値を返します。 
ConsクラスのToStringはオーバーライドされておらず、PrettyPrintというプロパティがあるので、これでリストの内容を表示できます。


IronSchemeについて全て説明するには大変ですし、 僕も全部理解できてはいません。
というかまだ開発中で正しいはずの式がエラー出すこともあったりして案外役に立ちません。
とりあえず 今日のところはここまで。