関数型プログラミングが面白そうだったのでF#を試してみることにしました。
資料が少ないので、とりあえずmsdnの記事を参考にしています。
一通り読んだところで(理解は出来ていませんが)Project Euler の Problem 1 に挑戦してみました。

10未満の自然数のうち、3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり、 これらの合計は 23 になる。

同じようにして、1,000 未満の 3 か 5 の倍数になっている数字の合計を求めよ。

試行錯誤の末、最初にコンパイルが通ったのが以下のコード。再帰バージョンです。

1
2
3
4
5
6
7
8
printfn "Problem 1"

let rec Problem1 x total =
    if x = 0 then total
    elif x % 3 = 0 || x % 5 = 0 then Problem1 (x-1) (total+x)
    else Problem1 (x-1) total
   
printfn "> %d" (Problem1 999 0)

もうちょっと短くしたいと思って書いたのが以下のコード。リストバージョンです。

1
2
3
4
5
6
7
8
9
10
printfn "Problem 1"

(* let rec Problem1 x total =
    if x = 0 then total
    elif x % 3 = 0 || x % 5 = 0 then Problem1 (x-1) (total+x)
    else Problem1 (x-1) total
   
printfn "> %d" (Problem1 999 0) *)


printfn "> %d" ([1..999] |> List.filter (fun a -> a%3=0 || a%5=0) |> List.sum)

List.filterやList.sumの使い方が合っているか分からないのですが、一応答えは求められています。
比較用:C#で解いたもの

投稿時に気づきました。
CodeColorer(ソースコードのハイライト用ツール)がF#に対応していない・・・。