-------------------------------------------------------------- -- benchmark programs (for the profiling tool) -- auxiliary functions: -- MAIN is used to mark the initial goal -- SCC is used to mark cost centers MAIN x = x SCC _ x = x app [] ys = ys app (x:xs) ys = x : app xs ys filter_ :: (a -> Bool) -> [a] -> [a] filter_ _ [] = [] filter_ p (x:xs) = if p x then x : filter_ p xs else filter_ p xs qsort :: [Int] -> [Int] qsort [] = [] qsort (x:l) = app (qsort (filter_ (=x) l)) rev [] = [] rev (x:xs) = app (rev xs) [x] rev_acc x = rev_ x [] rev_ [] acc = acc rev_ (x:xs) acc = rev_ xs (x:acc) foo x = SCC 1 (qsort (SCC 2 (rev x))) foo_acc x = SCC 1 (qsort (SCC 2 (rev_acc x))) fooo x = SCC 1 (app (SCC 2 (rev x)) []) fooo_acc x = SCC 1 (app (SCC 2 (rev_acc x)) []) ----Main goals----------------------------------- g1 = MAIN (foo [0,1,2,3]) --g2 = MAIN (foo_acc [0,1,2,3]) --g3 = MAIN (fooo [0,1,2,3]) --g4 = MAIN (fooo_acc [0,1,2,3])