The programs:

        -- common part
        module Main where

        reverse1 [] ys = ys
        reverse1 (x:xs) ys = reverse1 xs (x:ys)

        reverse2 ys [] = ys
        reverse2 ys (x:xs) = reverse2 (x:ys) xs

        -- program t1
        main = print (length $! reverse1 [1..2000000] [])

        -- program t2
        main = print (length $! reverse2 [] [1..2000000])

give the following execution times in my 256MB, AMD Athlon XP 1600
based (RedHat Linux 7.2) system running ghc 5.02.2:

                                                EXECUTION TIMES
        COMPILER        COMPILER OPTIONS        t1      t2
        ghc                                     1.503   1.516
        ghc             -O2                     1.858   1.834
        ghc             -fvia-c                 1.507   1.491
        ghc             -O2 -fvia-c             1.855   1.835
        nhc98                                   3.734   1.559

Comments:
- The compiler option -O2 with ghc leads to slight worse execution time
- Execution times for t1 and t2 are similar with ghc.
- t2 executes aproximately 2.4 times faster than t1 when compiled with nhc98
- t2 executation time when compiled with nh98 is as good as when compiled
  with ghc

Conclusions:
- with ghc there is no significant difference in performance when switching
  the position of the arguments subject to pattern matching in the function
  definition
- with nhc98, it is better to pattern match on the last argument
- surprisingly, the ghc -O2 compiler option generated code is worst than
  no optimization
  
Romildo
-- 
Prof. Jos� Romildo Malaquias               Departamento de Computa��o
http://iceb.ufop.br/~romildo       Universidade Federal de Ouro Preto
[EMAIL PROTECTED]                                           Brasil
[EMAIL PROTECTED]
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to