11/12/10 : Have a bleis, Have a KitKat.
■[F#]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を読めば理解できるようになるので心配はいりません。好評発売中です。
おしまい。
11/10/23 :
■[F#][CLR/H]オニギリアタタメマスカ・・・
ずいぶん昔のことですが、10/15にCLR/Hの第63回勉強会が開催されました。
Microsoftの荒井さんを講師にお招きし、ちゃっかり実践F#にサインを頂いてしまいました。
僕は今回LTに参加しました。
作っていたツール(ライブラリ?)があったので、それをお披露目しただけというつまらないLTです。
スライドは少ししかありませんが、熱狂的なK泉ファンのために一応アップしました。
今日のエントリは、そんな「おにぎり」の紹介です。
おにぎりとは・・・
おにぎりは、F#用のInteractive Testingツールです。
PythonやRubyのように、さくさくユニットテストを実行したかったので作りました。
F#には、NUnitをベースにしたFsUnitやNaturalSpecなどのテストツールがありますが、テスト用プロジェクトをビルドしてからじゃないとテストを実行できません。
おにぎりは、対話環境(F# Interactive)上で動作するため、コンパイルすることなく、即時にテストを行うことができます。素敵ですね。
以下からα版のソースをダウンロードできます。
https://bitbucket.org/Nobuhisa/onigiri/
※ Mercurialをお使いの方は、
$ hg clone https://bitbucket.org/Nobuhisa/onigiri
一応.NET 4向けにビルドしたDLLもおまけで付けてありますが、F# CTPやmonoをご利用の方は自分でビルドする必要があります。
例:
> c:\Program Files\Microsoft F#\v4.0\fsc.exe -o:Release\Onigiri.dll --optimize+ --target:library --utf8output Prelude.fs Assertion.fsi Assertion.fs Core.fs
まだα版なので今後仕様などが大幅に変わるかもしれませんが、そこはオトナの対応をしてください。
以下は簡単な利用例です。
おにぎりを使おう
以下のようなプログラム(テスト対象)があったとします。
- MyLibrary.fs
これに対するテストスクリプトです。
Onigiri.dllは、スクリプトファイルと同じフォルダに入れてあげるとラクかなと思います。
- Test.fsx
テストがかなり適当ですが、あまり気にしないでください。
このスクリプトを、[Ctrl + A] -> [Alt + Enter] で評価するか、
対話環境上で
#load "Test.fsx" ;;
してください(後者はパスを指定しないとならないので面倒だね)。
上記のテストは全て成功しますので、対話環境内に以下のように表示されます。
============================================================ Onigiri ! Onigiri ! ============================================================
プロジェクトに追加されたスクリプトファイル(.fsx)はコンパイル時には除外されますので、テストコードを残したままリリースビルドしても問題ありません。素敵ですね。
定義されている関数や演算子の一覧は、Assertion.fsiというシグネチャファイルをご利用ください。
正式版のリリースは気が向いたらします・・・。
清く美しいF#erの皆さんが、機能要望とか改善点などを指摘してくれたら嬉しいな。
あ、魔導書Vol.2の書籍版が発送されましたね。良かったら読んでね。
Enjoy Onigiri !
11/09/21 : 僕はノータリン 大切なものをあげる
■[F#]奇行寄稿しました
ロングゲート社から出版されている禁断の書物、
『プログラミングの魔導書』
ですが、この度Vol.2が出ます。
Vol.2のテーマは"プログラミング言語の進化"となっており、さまざまな言語の仕様や近況、研究成果などを扱っています。
F#の紹介は僕が担当しました。
著者それぞれ数カ月にわたり執筆・推敲に励んでいますので、決して適当な内容ではありません!
そして期間限定・受注生産方式をとっているため、チャンスを逃すと購入できません。
往々にして、できる男はチャンスを逃さないものです!!!←
ということで、みなさん買ってね♥
読む用と飾る用とプレゼント用に3冊くらい買ってもいいかもしれませんね。
往々にして、できる男は気前が良いものです!!!←
それでは紙面でお会いしましょう!
続きは魔導書で!
あわせて読みまくりたい:
http://d.hatena.ne.jp/faith_and_brave/20110915/1316048451
11/06/14 :
■[F#][OSC][勉強会]OSC2011 HokkaidoでF#のお話をしてきました
OSC2011 Hokkaidoで『これからの「言語」の話をしよう ―― 未来を生きるためのツール』という講演をしてきました。
事前登録は83名でしたが、当日は椅子を追加していたようなので、100人ほどいたかもしれません。
女性も何名かいらっしゃいました。F#がよく似合いそうなお綺麗な方々でした!
発表資料はSkyDriveとSlideShareにアップしました。
Silverlightをお使いの方はSkyDriveのWebAppで閲覧すると、より一層美味しく召し上がれます。
半数以上の方が「関数型言語に興味がある」とのことで、中には隠れF#ユーザもいました。「F#の街札幌」ならではの光景です。
手続き型というのは、言ってみればコンピュータ寄りのパラダイムで、人間のことはそれほど考えられていません。だから我々はバグに苦しみました。マルチスレッドに悩みました。
そこで人間を救うために現れたのが関数型です。天使です。
関数型の世界では、関数を抽象的に扱うことで、関数合成や高階関数などが可能になります。
これによって柔軟にプログラムが書けるようになります。
また、「変数の値は変更できない!」という、一見厳しい制約も、実は人間のためのルールなのです。
これにより、我々はバグの呪縛から解放されますし、並列計算に苦労しなくなります。
書き換え可能な変数というのは、どうしてもバグの温床となってしまいます。
OCamlやHaskellなど、関数型言語には洗練された良い言語が多いですが、
F#はそれらの英知をくみ取り、未来を見据えて開発された最先端の関数型言語です。
学んで損はないと思います!
