这段代码
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)
问题是:为什么?:|
只有最后一个版本可以工作,因为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)
将它们作为两个单独的参数传递 - 这里的区别在于使用逗号(元组)和空格(两个参数).
顺便说一下,当你使用更多的空格(就像我一样)时,这会变得更加清晰,因为单个元素更容易识别.
| 归档时间: |
|
| 查看次数: |
287 次 |
| 最近记录: |