Pet*_*all 5 haskell types integer
我正在使用Project Euler,很多问题涉及类似的功能,例如计算素数列表.我知道使用Integer进行的计算比Int慢,所以我想编写函数来处理两者,具体取决于我正在使用的数字的大小.
module Primes
(
isPrime
,prime
,allPrimes
)
where
import Data.List
isPrime :: Int -> Bool
isPrime n
| n == 0 = False
| n == 1 = False
| n < 0 = isPrime (-n)
| n < 4 = True
| n `mod` 2 == 0 = False
| n `mod` 3 == 0 = False
| any ( (==0) . mod n ) [5..h] = False
| otherwise = True
where
h = ( ceiling . sqrt . fromIntegral ) n
allPrimes :: [Int]
allPrimes = [ x | x<- [2..], isPrime x ]
prime :: Int -> Int
prime n = allPrimes !! (n-1)
Run Code Online (Sandbox Code Playgroud)
我知道这段代码通常不是最佳的.我只是对如何使整数类型更通用感兴趣.
尝试Integral
它应该允许支持Int
和Integer
对于这类问题的更通用的解决方案,您可以尝试在没有显式类型声明的情况下编译代码.Haskell将采用最通用的类型,您可以找到它的内容,例如,在GHCi上加载文件并执行:t myFunctionName
归档时间: |
|
查看次数: |
160 次 |
最近记录: |