通过Project Euler试图学习F#,我在为问题3编写解决方案时偶然发现了类似推断问题.
这是我写的:
let rec findLargestPrimeFactor p n =
if n = 1 then p
else
if n % p = 0 then findLargestPrimeFactor p (n/p)
else findLargestPrimeFactor (p+1) n
let result = findLargestPrimeFactor 2 600851475143L
Run Code Online (Sandbox Code Playgroud)
但是,编译器给出了以下错误:
error FS0001: This expression was expected to have type int but here has type int64
由于我希望从使用中findLargestPrimeFactor推断出使用的类型,我很惊讶地发现编译器似乎假设参数n是一个int,因为在函数的唯一调用是用int64完成的.
有人可以向我解释一下: