在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两种类型?


我认为这里有一个缩进错误 - printfn 行应该取消缩进,以便它在 while 循环之后出现。 - John Palmer
@jpalmer 不,我希望它打印出每个除数的值。例如,对于8,它应该打印2、2、2。 - Kirk Broadhurst
看起来像是 Haskell 中“类型类”概念的一个案例 :) - Ankur
2个回答

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

我没有编译器,所以我的语法可能有些错误。


MSDN#的在线文档(包括一些示例,特别是使用字面量1):*内联函数(F#)*。 - Richard

5
如果你只想处理 int64 值,只需将 10 分别替换为 1L0L。 jpalmer的回答涵盖了通用情况。

这很容易 - 我还需要像(int64)p一样转换质数。 - Kirk Broadhurst
@Kirk - 是的,我一直在假设你的质数已经是int64值了。 - kvb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接