1

我知道如果没有返回任何其他内容,F# 函数会返回一个单位,但这个函数会返回一个字符串。有人可以帮我理解为什么它会返回一个单位吗?

let rec processList aList str = 
    match aList with
    | h::t  ->  let x = Regex.Replace(str, h, h, RegexOptions.IgnoreCase)
                processList t x
    | []    ->  printfn "%s" str
4

2 回答 2

3

如果我们分析两个递归分支,它们的返回类型必须相同。

第一个分支有一些返回类型'a,它是processList

第二个分支返回unit,因为那是 的返回类型printfn。你可能只想拥有

| [] -> str

或者对于更复杂的情况,您可以使用sprintf返回格式化字符串,如下所示

| [] -> sprintfn "%s" str
于 2013-07-16T00:20:28.893 回答
3

这个递归函数的停止情况 | [] -> printfn "%s" str

返回单位,因此该函数返回一个单位。另一个分支只递归调用相同的函数。

于 2013-07-15T23:47:53.073 回答