progs/haskell/re.hs
changeset 359 fedc16924b76
parent 156 6a43ea9305ba
equal deleted inserted replaced
358:06aa99b54423 359:fedc16924b76
     1 import System.Environment
     1 import System.Environment
     2 import Data.List
     2 import Data.List
     3 import Text.Printf
     3 import Text.Printf
     4 import Control.Exception
     4 import Control.Exception
     5 import System.CPUTime
     5 import System.CPUTime
     6 import Control.Parallel.Strategies
     6 --import Control.Parallel.Strategies
     7 import Control.Monad
     7 import Control.Monad
       
     8 import Control.DeepSeq
     8 
     9 
     9 lim :: Int
    10 lim :: Int
    10 lim = 1
    11 lim = 1
    11 -- lim = 10^6
    12 -- lim = 10^6
    12  
    13  
    13 time :: (Num t, NFData t) => t -> IO ()
    14 time :: (Num t, NFData t) => t -> IO ()
    14 time y = do
    15 time y = do
    15     start <- getCPUTime
    16     start <- getCPUTime
    16     replicateM_ lim $ do
    17     replicateM_ lim $ do
    17         x <- evaluate $ 1 + y
    18         x <- evaluate $ 1 + y
    18         rdeepseq x `seq` return ()
    19         deepseq x `seq` return ()
    19     end   <- getCPUTime
    20     end   <- getCPUTime
    20     let diff = (fromIntegral (end - start)) / (10^12)
    21     let diff = (fromIntegral (end - start)) / (10^12)
    21     printf "%0.9f\n" (diff :: Double)
    22     printf "%0.9f\n" (diff :: Double)
    22     return ()
    23     return ()
    23 
    24 
   243           (case (r1d, r2s) of
   244           (case (r1d, r2s) of
   244              (ZERO, _)  -> (ZERO, f_id)
   245              (ZERO, _)  -> (ZERO, f_id)
   245              (_, ZERO)  -> (ZERO, f_id)
   246              (_, ZERO)  -> (ZERO, f_id)
   246              (ONE, _) -> (r2s, f_seq_void1 f1d f2s)
   247              (ONE, _) -> (r2s, f_seq_void1 f1d f2s)
   247              (_, ONE) -> (r1d, f_seq_void2 f1d f2s)
   248              (_, ONE) -> (r1d, f_seq_void2 f1d f2s)
   248              (_, _) -> (SEQ r1d r2s, f_seq f1d f2s))	  
   249              (_, _) -> (SEQ r1d r2s, f_seq f1d f2s))
   249     STAR r1 -> 
   250     STAR r1 -> 
   250       let (r1d, f1d) = der_simp c r1 
   251       let (r1d, f1d) = der_simp c r1 
   251       in
   252       in
   252         (case r1d of
   253         (case r1d of
   253            ZERO -> (ZERO, f_id)
   254            ZERO -> (ZERO, f_id)