tutorial online funciones empresa descargar constructora company haskell

online - haskell pdf



Tiempo de ejecuciĆ³n de la funciĆ³n Haskell (5)

Criterion es el método más sofisticado, aunque me resultó difícil comenzar y parece orientado a programas de evaluación comparativa. Quería calcular el tiempo de ejecución y usar esos datos dentro de mi programa y no parece abordar esta necesidad, al menos no es inmediatamente evidente.

TimeIt es muy simple y hace lo que yo quería, excepto que no maneja bien las funciones puras. El tiempo devuelto para una función pura es el tiempo de asignación de procesador (AFAIK) e incluso con el uso de seq puede ser difícil obtener lo que desea.

Lo que funciona para mí se basa en TimeIt.

import System.TimeIt timeItTPure :: (a -> ()) -> a -> IO (Double,a) timeItTPure p a = timeItT $ p a `seq` return a

En timeItTPure pa, p es la función responsable de evaluar el resultado de un cálculo puro, a, tan profundamente como sea necesario para obtener un buen tiempo de evaluación. Tal vez esta es una coincidencia de patrón simple, tal vez es contar la longitud de una lista, tal vez es seq cada elemento en la lista, tal vez es un deepseq, etc.

El uso de seq es complicado. Tenga en cuenta que la función siguiente no funciona como lo desea. Haskell es algo misterioso.

badTimeItTPure a = timeItT . return $ seq (p a) a

¿Hay un método simple para calcular el tiempo de ejecución de la función en Haskell?



Lo más simple es hacer :set +s en ghci , y luego se puede ver el tiempo de ejecución de todo lo que se ejecuta, junto con el uso de la memoria.



el benchmark del tiempo de ejecución de la función se incluye en Criterion.Measurement

por ejemplo, si quiero capturar el tiempo de someIOFunction :: IO ()

import Criterion.Measurement main = secs <$> time_ someIOFunction >>= print