En el siguiente código:¿El rendimiento de las funciones parciales o curriculares está bien definido en Haskell?
ismaxl :: (Ord a) => [a] -> a -> Bool
ismaxl l x = x == maxel
where maxel = maximum l
main = do
let mylist = [1, 2, 3, 5]
let ismax = ismaxl mylist
--Is each call O(1)? Does each call remember maxel?
let c1 = ismax 1
let c2 = ismax 2
let c3 = ismax 3
let c5 = ismax 5
putStrLn (show [c1, c2, c3, c5])
¿El ismax función parcial, calcular el maxel? En términos prácticos, ¿alguien puede señalar una regla sobre la complejidad de las funciones parciales en Haskell? ¿DEBE el compilador solo llamar al máximo una vez en el ejemplo anterior? Dicho de otra manera, ¿mantiene una función parcial las referencias de llamadas previas para cláusulas where internas?
Tengo algunos códigos de CPU que no funcionan de manera aceptable, y estoy buscando posibles errores en mi razonamiento sobre la complejidad.
Perfil. Perfil perfil perfil – delnan
Permítanme agregar a lo que dijo @delnan al [sugiriendo que establezca un perfil del código] (http://book.realworldhaskell.org/read/profiling-and-optimization.html). –
¿Desde cuándo se define el rendimiento en Haskell? Tal vez te refieres a alguna implementación de Haskell. – ephemient