我的代码:
let main _ =
let t = (System.Console.In.ReadLine ()) |> int
for i in 1..t do
let n = (System.Console.In.ReadLine ()) |> int
0
我得到的错误如下: 这个'let'之后的块未完成。每个代码块都是一个表达式,必须有结果。 'let'不能是块中的最终代码元素。考虑给这个块一个明确的结果。
你能帮帮我吗?非常感谢你。答案 0 :(得分:5)
为了更详细地说明为什么需要这样做 - 在F#中,除了类型和模块定义之外,所有内容都是具有一些返回值的表达式。这甚至适用于像printf
这样的东西 - 它们仍然返回值,但它是单位值,写为()
,表示没有信息的虚拟值。
问题是let <var> = <expr>
不是一个完整的表达式,因为它不会返回任何内容。完整表格为let <var> = <expr1> in <expr2>
。这会将<expr1>
的结果分配给变量<var>
并评估<expr2>
并返回结果。如果您正在使用换行符,则可以省略in
,但仍需要一些正文。
在你的例子中,最好的选择是使用()
作为正文,因为你没有返回任何有用的东西。您可以使用in
或使用换行符来写这个:
for i in 1..t do
let n = (System.Console.In.ReadLine ()) |> int in ()
for i in 1..t do
let n = (System.Console.In.ReadLine ()) |> int
()
这不是一个非常有用的东西,因为你没有在任何地方使用n
,但这是另一个问题。
答案 1 :(得分:1)
在for循环中,最后一个语句是let
。将0缩进添加到同一级别应解决问题
答案 2 :(得分:0)
感谢John Palmer。我学到了很多东西。所以这就是问题的结果:
let t = (System.Console.In.ReadLine ()) |> int
for i in 1..t do
let n = (System.Console.In.ReadLine ()) |> int
printf("%d\n") n
0
0