在F#中从int更改为uint64

时间:2014-12-04 02:56:35

标签: .net types f# functional-programming

我有一个用F#编写的函数,它确定一个数字是否为素数

let rec isPrime (number, f):bool =
    match number, f with
    | n, f when f = 1 || f = 0 -> isPrime(number, (f + 1)) 
    | n, f when f > n / 2 -> true
    | n, f when n % f = 0 -> false
    | n, f when n % f > 0 -> isPrime(number, (f + 1))
    | _ -> false

printfn "%b" (isPrime (7, 0))

这个功能对我来说是非常干净的F#代码,确定算法可能不完美,但它的工作原理和看起来不错。但问题就在这里,如果我想使用比int类型更大的数字会允许什么呢?

let rec isPrime (number:uint64, f:uint64):bool =
    match number, f with
    | n, f when f = 1UL || f = 0UL -> isPrime(number, (f + 1UL))
    | n, f when f > n / 2UL -> true
    | n, f when n % f = 0UL -> false
    | n, f when n % f > 0UL -> isPrime(number, (f + 1UL))
    | _ -> false

printfn "%b" (isPrime (7UL, 0UL))

我必须用类型来提升我的代码,这并不像我想的那样干净。有没有办法避免明确提到uint64类型?

0 个答案:

没有答案