Types 在F中显式指定参数类型#

Types 在F中显式指定参数类型#,types,f#,parameters,type-inference,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 让因子素数i= 设可变j=i 对于素数do中的p 而(j>1)和(j%p=0)则 你将不得不做一些类似的事情

我在写一个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
让因子素数i=
设可变j=i
对于素数do中的p
而(j>1)和(j%p=0)则

你将不得不做一些类似的事情

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
let内联因子(素数:^a列表)(i:^a)=
设零:^a=LanguagePrimitives.GenericZero
设一个:^a=LanguagePrimitives.GenericOne
设可变j=i
对于素数do中的p
而(j>1)&(j%p=0)do

j如果只想处理
int64
值,只需将
1
0
分别替换为
1L
0L
。jpalmer的回答涵盖了一般情况。

我认为这里有一个缩进错误-
printfn
行应该被定义,以便在while之后出现loop@jpalmer不,我要它打印每个除数的值。e、 g.对于8,它应该打印2,2,2。看起来像是Haskell的“类型类”概念的一个例子:)这很简单-我还需要像
(int64)p
@Kirk一样转换素数-是的,我一直假设你的素数已经是int64值。MSDN的在线文档(有一些例子,特别是使用literal
1
):。