我是F#的新手,所以这个问题可能很简单。不过,我找不到关于SO的任何建议。
我在玩F#中的算法任务。第一步,我想从用户控制台输入创建一个整数集合。输入的数量未定义。而且我不会使用任何while
循环。我希望使用尽可能多的惯用方法。
在递归函数中,我正在读取结果并使用Int32.TryParse
对其进行解析。我使用match ... with
匹配布尔结果。如果成功,那么我将新值附加到集合中。否则,我将退还该收藏。
下面是我的代码:
let rec getNumList listSoFar =
let ok, num = Int32.TryParse(Console.ReadLine())
match ok with
| false -> listSoFar
| true -> getNumList num::listSoFar
let l = getNumList []
我得到的错误是:
类型不匹配。期待一个
'一个
但给了
'一个列表
我知道我使用的类型不正确,尽管我不明白到底是什么错误。任何解释高度赞赏。
最佳答案
在比赛分支
| true -> getNumList num::listSoFar
您应该使用括号:
| true -> getNumList (num::listSoFar)
因为函数应用程序的优先级高于
::
运算符