首页 文章

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

提问于
浏览
3

我正在编写一个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

它适用于 iint 值,但不适用于 int64 值 . 参数 primes 是一组int值 .

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

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

2 回答

  • 8

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

  • 5

    你将不得不做类似的事情

    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
    

    我没有编译器,所以我的语法可能略有偏差

相关问题