我有一个用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类型?