[Haskell-cafe] Bug in GHCi?
Dusan Kolar
kolar at fit.vutbr.cz
Wed Aug 8 04:04:32 EDT 2007
Hello all,
Maybe this is a wrong place to report, but I have repeatedly performed
"funny" calculation in GHCi with strange time report. The version of
GHCi is:
___ ___ _
/ _ \ /\ /\/ __(_)
/ /_\// /_/ / / | | GHC Interactive, version 6.6, for Haskell 98.
/ /_\\/ __ / /___| | http://www.haskell.org/ghc/
\____/\/ /_/\____/|_| Type :? for help.
Loading package base ... linking ... done.
Prelude>
My machine: OS WinXP Pro SP2, Intel Core 2, 2GB RAM.
How to reproduce error:
:set +s
:set -02
:cd <path to the file in the attachment>
:l Primes
take 10000 primes1
<provides correct result and shows correct timing, about 636 seconds>
take 10000 primes2
<provides correct result, BUT INCORRECT TIMING - about -326 seconds>
Yes, that is not a typo. The report of time elapsed is: minus three
hundred and twenty six seconds.
I'll try the newest version of the GHCi, but it is strange anyway and
maybe it should be investigated...
Thanks,
Dusan
-------------- next part --------------
module Primes (
primes1
,primes2
,primes3
,primes2'
,primes3'
) where
candidates = map (\x -> (True,x)) [2..]
candidates' = [2..]
skipmap f toSkip list = domap toSkip list
where
domap n (x:xs)
| n > 1 = x : domap (n-1) xs
| True = f x : domap toSkip xs
domap _ [] = []
primes1 = sieve candidates
where
sieve (pp@(isp,p):xs)
| isp = p : (sieve $ skipmap (\(_,v) -> (False,v)) p xs)
| True = sieve xs
primes1' = sieve candidates'
where
sieve (p:xs)
| p > 0 = p : (sieve $ skipmap (\n -> if n>0 then (-n) else n) p xs)
| True = sieve xs
sieve (p:xs) = p : sieve [y | y <- xs, y `mod` p /= 0]
sieve' (p:xs) = p : sieve [y | y <- xs, y `mod` p > 0]
primes2 = sieve [2..]
primes3 = 2 : sieve [3,5..]
primes2' = sieve' [2..]
primes3' = 2 : sieve' [3,5..]
More information about the Haskell-Cafe
mailing list