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 romildo@iceb.ufop.br Brasil romildo@uber.com.br