IronSchemeは生きている F#の中に

F# Advent Calendar 2011の参加エントリです。


言語指向プログラミング(LOP)をサポートする機能として、
F#にはアクティブパターンやコンピューテーション式と言ったものがあります。
今日は後者のコンピューテーション式を使ってF#にSchemeを組み込んでみたいと思います。


DLR上で動作するIronSchemeという処理系があります(何気にR6RS準拠)。
うんこな側面もいくつかありますが、個人的には期待しています。でも少しうんこです。
こいつを利用します。ここでは最新版の1.0 RC5を使いました。

プログラム

サンプルプログラムはbitbucketに置いてあります。
http://bitbucket.org/Nobuhisa/f-advent-calendar-2011/src
実行には.NET 4以上が必要です。そのため、mono環境では動作しません(多分)。
テストコードもおまけで付いています。Onigiri便利です。←


まずは定義されたコンピューテーション式を利用してみます。

sample1 : 1024
sample2 : 200
本来であればIronSchemeのスクリプトエンジンを用意して式をEvalしなくてはなりませんが、
LOPによって空間を分離し、面倒な部分一切を後ろの世界に隠蔽しています。


以下が実装の全容です。
オシャレな感じを出すために、Late Binding Operator Expressionsを使っています。


実用するためには他にも実装しなければならない点がありますが、
実用しないので問題ありません。


初心者の方には難しかったかもしれませんが、プログラミングの魔導書Vol.2を読めば理解できるようになるので心配はいりません。好評発売中です。


おしまい。