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

F# 为什么不在F中编译#,f#,recursion,F#,Recursion,这将编译并运行: let rec HelloEternalWorld _ = Console.ReadLine() |> printf "Input: %s\n" HelloEternalWorld 0 HelloEternalWorld 0 让rec HelloEternalWorld uu= Console.ReadLine()|>printf“输入:%s\n” HelloEternalWorld 0 HelloEternalWorld 0 这不会编译: let rec Hell

这将编译并运行:

let rec HelloEternalWorld _ = Console.ReadLine() |> printf "Input: %s\n" HelloEternalWorld 0 HelloEternalWorld 0 让rec HelloEternalWorld uu= Console.ReadLine()|>printf“输入:%s\n” HelloEternalWorld 0 HelloEternalWorld 0 这不会编译:

let rec HelloEternalWorld = Console.ReadLine() |> printf "%s\n" HelloEternalWorld HelloEternalWorld 让rec HelloEternalWorld= Console.ReadLine()|>printf“%s\n” 地狱世界 地狱世界
我试图理解为什么不呢?

您所缺少的都是括号,因为如果它是:


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


要定义一个没有参数的函数,您需要用括号来区分函数和简单值。

请发布您收到的错误消息,它们会告诉您需要的一切

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

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

为了使它成为一个函数,您必须编写如下内容

let rec HelloEternalWorld() = 
  Console.ReadLine() |> printfn "%s"
  HelloEternalWorld()
它现在是
unit->unit
类型的函数