Hatena::ブログ(Diary)

総合的な学習のお時間 RSSフィード

2010-12-19

[] F#学習用リソースいろいろ 22:50  F#学習用リソースいろいろを含むブックマーク

この記事は F# Advent Calendar jp 2010に参加しています。

最近ちょうどF#を覚え始めたところでして、同じような方も多いと思いますので、F#の学習に使えるいろいろを紹介します。


プログラミングF#

プログラミングF#

プログラミングF#

定番でしょうか。ぼちぼち読み進めています。

書籍で学習しようと思ったら、とりあえずこれを選んでおけば間違いはなさそうです。


F# Survival Guide

http://www.ctocorner.com/fsharp/book/default.aspx

本を買うのにお金かけたくないという方はこちらで(全編英語ですが)。


Sphere Online Judge(SPOJ)

https://www.spoj.pl/

プログラミングの問題が多数置かれています。

対応言語40種超というのはこの手のサイトでは一番多いのではないでしょうか。F#のほかにBrainf*ckやWhitespaceなどにも対応。

文法を覚えてきて何かコード書きたいけど手頃なのがない、というときの題材になります。

一番簡単な問題をF#で解いた人たち一覧:https://www.spoj.pl/ranks/TEST/lang=FS


Codeforces

http://codeforces.com/

週1回くらいの頻度でプログラミングコンテストを開催しているサイトです。

解答をF#で提出できるというのはなかなか珍しい。

素早く書く力を鍛えようと思ったらこれにF#で参加してみると良さそうです。


ideone

http://www.ideone.com/

コード共有&コンパイル&実行サービス。最近よく見かけますね。

いろいろな言語が使え、F#にも対応しています。

例:http://www.ideone.com/fyq5M


F# snippets

http://fssnip.net/

F#に特化したコード共有サービス。参考になるコードがいろいろと置かれています。

次のような特徴があります。

  • Visual Studioと同様のツールチップが出る
  • 投稿したコードごとにタイトルやタグを指定できる
  • 参考になったコードに投票できる
  • 折りたたみを指定できる
    • コードの一部だけを表示する
      • // [snippet:%TITLE%]」と「// [/snippet]」でコードの一部を挟むと、その部分だけが表示されます。
      • 複数使うとコードが複数個の部分に分けて表示されます(詳しくは下の例を)。
      • %TITLE%のところに書いた文字列が、その部分のキャプションになります。
      • 囲まなかった部分は表示されないので、先頭に書くopenの列挙などコード中の面白くない部分を省略するのにも使えます。
    • コードの一部を省略する
      • (*[omit:%COMMENT%]*)」と「(*[/omit]*)」でコードの一部を挟むと、その部分が省略されます。
      • 重要ではない実装の詳細を隠してコードの骨格を明確にするなどの目的に使えます。
      • %COMMENT%の所に書いた文字列が、省略された部分に表示されます。

折りたたみの例:次のコードが(はてな記法でF#のシンタクスハイライト未対応なんですね…)

// meaningless opens
open System
open System.Collections.Generic

// [snippet:FizzBuzz sample]
let fizzbuzz x =
    if x % 3 = 0 && x % 5 = 0 then
        (*[omit:print "fizz" ans "buzz"]*)printfn "fizzbuzz"(*[/omit]*)
    elif x % 3 = 0 then
        (*[omit:print "fizz"]*)printfn "fizz"(*[/omit]*)
    elif x % 5 = 0 then
        (*[omit:print "buzz"]*)printfn "buzz"(*[/omit]*)
    else
        (*[omit:print number]*)printfn "%d" x(*[/omit]*)

let fizzbuzz_loop n =
    List.iter fizzbuzz [1 .. n]
// [/snippet]

// [snippet:main]
fizzbuzz_loop 100;;
// [/snippet]

こうなります→http://fssnip.net/1h