[Haskell-beginners] Time interval calculation
legajid
legajid at free.fr
Sat Mar 13 16:02:41 EST 2010
Sorry Daniel,
i've seen your answer just after posting my reply.
But i can't write !t1f <- gettime, nor t1f <- !gettime; because it's an IO ?
Your method is a good help form me.
Thanks,
Didier
Daniel Fischer a écrit :
> Am Samstag 13 März 2010 21:20:58 schrieb legajid:
>
>> Hi,
>> my following code should show time before executing listeprem, then time
>> after execution.
>>
>> import System.Time
>> gettime :: IO ClockTime
>> gettime = getClockTime
>>
>> main=do
>> t1d <- gettime
>>
>
> This gets the time, now.
>
>
>> let t1=last (listeprem 5000)
>>
>
> This doesn't do the calculation, it only creates a thunk what to calculate
> should t1 be demanded, takes a few nanoseconds
>
>
>> t1f <- gettime
>>
>
> This gets the time, a few nanoseconds later
>
>
>> putStrLn ("Methode 1 : " ++ show t1d)
>> putStrLn (" " ++ show t1)
>>
>
> Now t1 is demanded, and only now it's calculated.
>
>
>> putStrLn (" " ++ show t1f)
>>
>> Looking at the screen, t1d is displayed then, after a few seconds, t1
>> and t1f.
>> But, t1d and t1f are equal.
>> It seems like if t1d and t1f where calculated at start of procedure,
>> before we need calculating t1 for putStrLn.
>>
>
> Exactly.
>
>
>> How can i have t1f evaluated after t1, so i can calculate time elapsed
>> for calculation of t1?
>>
>
> Depends on what sort of value t1 is. If it's a simple value like an Integer
> (as I think it is here, derniere nombre premier avant 5000, 5000-th
> prime?),
>
> {-# LANGUAGE BangPatterns #-}
> ...
> let !t1 = last (listeprem 5000)
> t1f <- gettime
>
> or
>
> let t1 = last (listeprem 5000)
> t1f <- t1 `seq` gettime
>
> will do. For small values, printing takes negligible time, so
>
> t1d <- gettime
> putStrLn (" " ++ show t1f)
> t1f <- gettime
>
> is another option. But getClockTime isn't particularly exact, I'd suggest
> using System.CPUTime.getCPUTime
>
>
>> Thanks,
>> Didier
>>
>
>
More information about the Beginners
mailing list