【发布时间】:2013-02-07 03:17:44
【问题描述】:
通过 Project Euler 尝试学习 F#,我在为 problem 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
但是,编译器给了我以下错误:
错误 FS0001:此表达式应为 int 类型,但此处为 int64 类型
由于我希望 findLargestPrimeFactor 中使用的类型是从使用中推断出来的,我很惊讶地发现编译器似乎假设参数 n 是一个 int,因为在唯一调用函数时完成使用 int64。
谁能给我解释一下:
- 为什么编译器似乎对类型感到困惑
- 如何解决此限制
【问题讨论】:
标签: f# type-inference