sumを再帰的に定義しましょう。
let sum list = match list with | head :: tail -> head + sum tail | [] -> 0 let N = 1000; printfn "%d" (sum (List.filter (fun n -> n % 3 = 0 || n % 5 = 0) [1..N-1]))
最後の行、filterはこのように使います。
ラムダは次のように書きます。
fun n -> n % 3 = 0 || n % 5 = 0
そして、[1..N-1]は1からN-1のリストです。
sumの定義の中身はHaskellと似てますね。
さて、上をコンパイルすると、
error FS0039: The value or constructor 'sum' is not defined
どうやら再帰的に関数を定義したいときはrecを使わないといけないようです。
let rec sum list =
よく見ると、ちゃんとfoldもありました。
let rec sum list = List.fold (+) 0 list
実際には、List.sumを使えばよいです。
let N = 1000; printfn "%d" (List.sum (List.filter (fun n -> n % 3 = 0 || n % 5 = 0) [1..N-1]))