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

Kir*_*rst 3 parameters f# types 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
Run Code Online (Sandbox Code Playgroud)

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

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

是否有可能写这个功能,使得它能向两家合作intint64

Joh*_*mer 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
Run Code Online (Sandbox Code Playgroud)

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


kvb*_*kvb 5

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