素数

素数を列挙するプログラム

--------------------------------------------------
-- prime.hs
--------------------------------------------------

import System.Environment(getArgs)

--------------------------------------------------
-- prime 2 0		list primes from 2 to infinite
-- prime start end	list primes from start to end
--------------------------------------------------
prime :: Integer -> Integer -> [Integer]
prime start 0  = [x | x <- [start..], isPrime x 2]
prime start end = [x | x <- [start..end], isPrime x 2]

--------------------------------------------------
-- judge the number is prime
-- if the number is prime, then True otherwise False
--------------------------------------------------
isPrime :: Integer -> Integer -> Bool
isPrime n x
  | (div n 2) < x  = True
  | (mod n x) == 0 = False
  | otherwise      = isPrime n (x+1)


--------------------------------------------------
main = do
  arg1:arg2:rest <- getArgs
  let start = read arg1 :: Integer
  let end   = read arg2 :: Integer
  let primes = prime start end
  print primes