为什么这不能在F#中编译

时间:2009-07-05 14:40:26

标签: f# recursion

编译并运作:

let rec HelloEternalWorld _ = 
  Console.ReadLine() |> printf "Input: %s\n"
  HelloEternalWorld 0

HelloEternalWorld 0

这不编译:

let rec HelloEternalWorld = 
  Console.ReadLine() |> printf "%s\n"
  HelloEternalWorld

HelloEternalWorld

我试着理解为什么不呢?

2 个答案:

答案 0 :(得分:7)

你所缺少的只是括号,因为它会编译,如果是:


let rec HelloEternalWorld() = 
  Console.ReadLine() |> printf "%s\n"
  HelloEternalWorld()


要定义不带参数的函数,需要使用括号将函数与简单值区分开来。

答案 1 :(得分:4)

请发布您收到的错误消息,他们会说出您需要的一切!

  

值...将作为其自己定义的一部分进行评估。

您的代码无法编译,因为您声明了一个递归值(不存在)而不是递归函数。

为了使其成为一种功能,你必须写一些像

这样的东西
let rec HelloEternalWorld() = 
  Console.ReadLine() |> printfn "%s"
  HelloEternalWorld()

现在是unit -> unit类型的函数。