调用函数时F#类型不匹配

wie*_*ero 0 f#

这段代码

let rec readNLines n list =
 if n = 0 then
  list
 else 
  readNLines(n-1,readInt()::list)
Run Code Online (Sandbox Code Playgroud)

以..结束

Type mismatch. Expecting a 'a but given a 'a -> 'a    
The resulting type would be infinite when unifying ''a' and
''a -> 'a' (using built-in F# compiler)
Run Code Online (Sandbox Code Playgroud)

但是当最后一行改为时运行正常

  readNLines(n-1,(readInt()::list))
Run Code Online (Sandbox Code Playgroud)

要么

  readNLines(n-1)(readInt()::list)
Run Code Online (Sandbox Code Playgroud)

问题是:为什么?:|

Tea*_*Dev 8

只有最后一个版本可以工作,因为readNLines需要两个参数,但是

readNLines (n - 1, readInt() :: list)
Run Code Online (Sandbox Code Playgroud)

只传递一个参数(由一个int和一个组成的元组list).

readNLines (n - 1) (readInt() :: list)
Run Code Online (Sandbox Code Playgroud)

将它们作为两个单独的参数传递 - 这里的区别在于使用逗号(元组)和空格(两个参数).

顺便说一下,当你使用更多的空格(就像我一样)时,这会变得更加清晰,因为单个元素更容易识别.