Tya*_*yam 0 recursion f# function let
我正在用 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
Run Code Online (Sandbox Code Playgroud)
我应该如何更正代码?
它是最后一行的零。因为它向右缩进一个字符,所以它被认为是let sumToN
块的一部分。
因此,整个函数main
看起来就像它let
的主体中只有一个,并且在let
.
这是 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
Run Code Online (Sandbox Code Playgroud)