编译并运作:
let rec HelloEternalWorld _ = Console.ReadLine() |> printf "Input: %s\n" HelloEternalWorld 0 HelloEternalWorld 0
这不编译:
let rec HelloEternalWorld = Console.ReadLine() |> printf "%s\n" HelloEternalWorld HelloEternalWorld
我试着理解为什么不呢?
答案 0 :(得分:7)
你所缺少的只是括号,因为它会编译,如果是:
let rec HelloEternalWorld() =
Console.ReadLine() |> printf "%s\n"
HelloEternalWorld()
要定义不带参数的函数,需要使用括号将函数与简单值区分开来。
答案 1 :(得分:4)
请发布您收到的错误消息,他们会说出您需要的一切!
值...将作为其自己定义的一部分进行评估。
您的代码无法编译,因为您声明了一个递归值(不存在)而不是递归函数。
为了使其成为一种功能,你必须写一些像
这样的东西let rec HelloEternalWorld() =
Console.ReadLine() |> printfn "%s"
HelloEternalWorld()
现在是unit -> unit
类型的函数。