The stopping case for this recursive function | [] -> printfn "%s" str
returns unit, and therefore the function returns a unit. The other branch only recursively call the same function.
题
I understand that F# functions return a unit if nothing else is returned, but this function returns a string. Can someone please help me understand why it returns a unit?
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
解决方案
The stopping case for this recursive function | [] -> printfn "%s" str
returns unit, and therefore the function returns a unit. The other branch only recursively call the same function.
其他提示
If we analyse the two recursive branches, their return types must be identical.
The first branch has some return type 'a
which is the return value of processList
The second branch returns unit
as that is the return type of printfn
. You probably want to have just
| [] -> str
or for a more complex case, you can use sprintf
to return a formatted string as follows
| [] -> sprintfn "%s" str