无法在 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
看起来它的主体中只有一个 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
我正在使用 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
看起来它的主体中只有一个 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