『F#入門』の資料公開

04月17日(土)にCLR/Hの第47回勉強会が開催されました。
僕は『F#入門 〜関数プログラミングとは何か〜』というセッションを担当しました。
その際の発表資料を公開します。


『F#入門』
SkyDriveにアップロードしてみました(ダウンロードしなくてもpptを表示できるという噂を聞いたので*1)。
アニメーションが色々盛り込まれているので、ぜひダウンロードしてから全画面表示でご覧になってください!


一応SlideShareにもアップしてみました。またフォントが残念なことになっているのでオススメしません*2。アニメーションは全滅しています。流し見したい方向け。




以下はデモプログラムです。
デモもSkyDriveにアップロードしてみました。(Download)

Async Workflow

Twitterに並列にアクセスするデモを行いました。(当日は失敗しました。。。)
ソースが長いのでここには載せません。ダウンロードしてご覧ください。

PLINQ

我ながら面白くないと思うコードです。
F# PowerPackというライブラリを使うと簡単にPLINQ(PSeq)を利用することができます。

open System
open Microsoft.FSharp.Collections

let max = 20
let Even x = x % 2 = 0

let Normal () =
    [| 1 .. max |]
    |> Seq.map (( * ) 10)
    |> Seq.filter Even

let PLinq () =
    [| 1 .. max |]
    |> PSeq.map (( * ) 10)
    |> PSeq.filter Even

[<STAThread>]
do
    printfn "%A" <| Normal ()
    printfn "%A" <| PLinq ()

Actor

少し会場が盛り上がった(?)アクターを使ったゲームのコードです。
ビルドするのではなく、対話環境で評価して実行します。
評価例:
> agents.[0].Post "nobuhisa" ;;

open System

let Agent x = MailboxProcessor<string>.Start (fun box -> async {
        let! name = box.Receive ()
        Console.Write ("{0}さん・・・", name)

        if x then Console.WriteLine "お宝\(^o^)/GET !!"
        else Console.WriteLine "ざんねん!"
})

let GenerateAgents n =
    let rnd = (new Random ()).Next (0, n)
    [| for x in 0..n -> Agent (x = rnd) |]

let agents = GenerateAgents 4

*1:[追記]サインインして、テクニカルプレビュープログラムに参加すると、Silverlightでその場で表示できるみたいです

*2:PDFでアップしなおしたらフォントがよみがえりました。j.sakamotoさんThx!