在F#中明确指定参数类型

时间:2011-09-28 01:35:51

标签: types f# parameters type-inference

我正在写一个F#函数,它将一个数字分解为素因子。

let factors primes i =
    let mutable j = i
    for p in primes do 
        while (j>1) && (j%p=0) do 
            j <- j/p
            printfn "prime: %i" p

适用于int的{​​{1}}值,但不适用i个值。参数int64是一组int值。

我理解为什么会这样 - 类型推断假设函数只接受primes个参数 - 但我想明确地将参数类型指定为int

是否可以编写此函数以使其适用于int64int

2 个答案:

答案 0 :(得分:8)

您必须执行类似

的操作
let inline factors (primes :^a list) (i:^a) =
    let zero:^a = LanguagePrimitives.GenericZero
    let one:^a = LanguagePrimitives.GenericOne
    let mutable j = i
    for p in primes do 
        while (j>one) && (j%p=zero) do 
            j <- j/p
            printfn "prime: %i" p

我没有编译器,所以我的语法可能稍微关闭

答案 1 :(得分:5)

如果您只想使用int64值,请分别将10替换为1L0L。 jpalmer的答案涵盖了一般案例。