相关疑难解决方法(0)

F#在实际处理int64时假设为int

通过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完成的.

有人可以向我解释一下:

  1. 为什么编译器似乎对类型感到困惑
  2. 如何解决这个限制

f# type-inference

5
推荐指数
1
解决办法
674
查看次数

标签 统计

f# ×1

type-inference ×1