我是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)


因为函数应用程序的优先级高于::运算符

10-06 11:11