我正在写一个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
。
是否可以编写此函数以使其适用于int64
和int
?
答案 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
值,请分别将1
和0
替换为1L
和0L
。 jpalmer的答案涵盖了一般案例。