无法在 F# 中使用 let 关键字定义递归方法

Can not define a recursive method with let key word in F#

我正在使用 VS 学习 F#。

你能告诉我为什么编译器给我一个错误 FS3118 和下面的代码吗?

sumToN前的"let"用红色下划线标出...

FS3118:不完整的值或函数定义。如果这是在表达式中,则表达式的主体必须缩进到与 'let' 关键字相同的列。

open System
[<EntryPoint>]
let main argv =
   let sumToN n = let rec f s n = if n > 0L then f (s+n) (n-1L) else s in f 0L n
   //let sum = sumToN(5L)
   //do printfn "%i" sum |> ignore
    0

我应该如何更正代码?

这是最后一行的零。因为它向右缩进了一个字符,所以它被认为是 let sumToN 块的一部分。

因此,整个函数 main 看起来它的主体中只有一个 letlet 之后没有任何行。

这是 F# 中的错误语法。如果函数体中没有要执行的行,那么这样的函数什么都不做,因此没有意义。

要修复,取消缩进零:

let main argv =
   let sumToN n = let rec f s n = if n > 0L then f (s+n) (n-1L) else s in f 0L n
   //let sum = sumToN(5L)
   //do printfn "%i" sum |> ignore
   0