(hatena (diary ’Nobuhisa)) このページをアンテナに追加 RSSフィード Twitter

11/12/10 : Have a bleis, Have a KitKat.

[]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 :

[][]オニギリアタタメマスカ・・・

ずいぶん昔のことですが、10/15にCLR/Hの第63回勉強会が開催されました。

Microsoftの荒井さんを講師にお招きし、ちゃっかり実践F#にサインを頂いてしまいました。

f:id:Nobuhisa:20111021022100j:image:w150


僕は今回LTに参加しました。

作っていたツール(ライブラリ?)があったので、それをお披露目しただけというつまらないLTです。

スライドは少ししかありませんが、熱狂的なK泉ファンのために一応アップしました。

slideshare - おにぎり

今日のエントリは、そんな「おにぎり」の紹介です。


おにぎりとは・・・

おにぎりは、F#用のInteractive Testingツールです。

PythonRubyのように、さくさくユニットテストを実行したかったので作りました。

F#には、NUnitをベースにしたFsUnitNaturalSpecなどのテストツールがありますが、テスト用プロジェクトをビルドしてからじゃないとテストを実行できません。

おにぎりは、対話環境(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 : 僕はノータリン 大切なものをあげる

[]奇行寄稿しました

ロングゲート社から出版されている禁断の書物、

『プログラミングの魔導書』

ですが、この度Vol.2が出ます。

プログラミングの魔導書 〜Programmers’ Grimoire〜 Vol.2

Vol.2のテーマは"プログラミング言語の進化"となっており、さまざまな言語の仕様や近況、研究成果などを扱っています。


F#の紹介は僕が担当しました。

著者それぞれ数カ月にわたり執筆・推敲に励んでいますので、決して適当な内容ではありません!

そして期間限定・受注生産方式をとっているため、チャンスを逃すと購入できません。

往々にして、できる男はチャンスを逃さないものです!!!←


ということで、みなさん買ってね♥

読む用と飾る用とプレゼント用に3冊くらい買ってもいいかもしれませんね。

往々にして、できる男は気前が良いものです!!!←


それでは紙面でお会いしましょう!

続きは魔導書で!


あわせて読みまくりたい:

http://d.hatena.ne.jp/faith_and_brave/20110915/1316048451

http://d.hatena.ne.jp/heisseswasser/20110920/1316534381

http://d.hatena.ne.jp/bleis-tift/20110919/1316432339

11/09/05 :

[]フォースとの決別

May the force be with you...

そう言われて育ってはきたけれど(!)、フォースを使わないで済むならそうしたい。

ということで、型関数(Type Function)を使ったミニハックをご紹介。


0
F#!F#!
10

"e + 1"で初めて変数eが評価されます。

ただ、型関数は利用できる場面が限られているので(ローカル変数としては使えない 等)、あまり便利なテクではないかもしれません・・・。


型関数はちょっとマイナーな機能ですが、 typeof<'T> や sizeof<'T> などはこの機能を使って実装されています。

11/06/14 :

[][][]OSC2011 HokkaidoでF#のお話をしてきました

OSC2011 Hokkaidoで『これからの「言語」の話をしよう ―― 未来を生きるためのツール』という講演をしてきました。

事前登録は83名でしたが、当日は椅子を追加していたようなので、100人ほどいたかもしれません。

女性も何名かいらっしゃいました。F#がよく似合いそうなお綺麗な方々でした!


発表資料はSkyDriveSlideShareにアップしました。

Silverlightをお使いの方はSkyDriveのWebAppで閲覧すると、より一層美味しく召し上がれます。



半数以上の方が「関数型言語に興味がある」とのことで、中には隠れF#ユーザもいました。「F#の街札幌」ならではの光景です。


手続き型というのは、言ってみればコンピュータ寄りのパラダイムで、人間のことはそれほど考えられていません。だから我々はバグに苦しみました。マルチスレッドに悩みました。

そこで人間を救うために現れたのが関数型です。天使です。

関数型の世界では、関数を抽象的に扱うことで、関数合成や高階関数などが可能になります。

これによって柔軟にプログラムが書けるようになります。

また、「変数の値は変更できない!」という、一見厳しい制約も、実は人間のためのルールなのです。

これにより、我々はバグの呪縛から解放されますし、並列計算に苦労しなくなります。

書き換え可能な変数というのは、どうしてもバグの温床となってしまいます。


OCamlHaskellなど、関数型言語には洗練された良い言語が多いですが、

F#はそれらの英知をくみ取り、未来を見据えて開発された最先端の関数型言語です。

F#はIDEまでも無料でお使いいただけます

学んで損はないと思います!


続きを読む