https://try.fsharp.org/ で動作確認しました。
正しくは let rec ... in ですね。
再帰関数を定義した後に、sum 10を実行しているといった理解でいいんでしょうか?
その通りです。ワンライナーになってるので読みにくいですが、
F#
1printfn "%d" (let rec sum x = if x > 0 then x + sum (x - 1) else 0 in sum 10)
余分に括弧を付けてlet束縛の範囲を分かりやすくすると
F#
1printfn "%d" (
2 let rec sum x =
3 (if x > 0 then x + sum (x - 1) else 0)
4 in
5 sum 10
6 )
通常はsumの定義を外に出して、この様に書いた方が解りやすいと思います。
F#
1let rec sum x = if x > 0 then x + sum (x - 1) else 0 in
2 printfn "%d" (sum 10)
F#
1let rec sum x =
2 if x > 0 then
3 x + sum(x - 1)
4 else
5 0
6
7printfn "%d" (sum 10)
追記: ところで、この関数の実装は sum ではなく factorial では。