Im folgenden Code:Ist die Performance von partiellen oder Curry-Funktionen in Haskell gut definiert?
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])
Ist die Teilfunktion ismax, die maxel berechnen? Konkret kann jemand auf eine Regel über die Komplexität von Teilfunktionen in Haskell hinweisen? MUSS der Compiler im obigen Beispiel nur einmal aufrufen? Anders ausgedrückt, behält eine partielle Funktion die Referenzen früherer Aufrufe für interne where-Klauseln bei?
Ich habe einige CPU-gebundenen Code, der nicht akzeptabel funktioniert, und ich suche nach möglichen Fehlern in meiner Argumentation über die Komplexität.
Profil. Profil Profil Profil. – delnan
Lassen Sie mich zu dem hinzufügen, was @delnan gesagt hat [indem vorgeschlagen wurde, dass Sie den Code profilieren] (http://book.realworldhaskell.org/read/profiling-and-optimization.html). –
Seit wann ist die Leistung in Haskell definiert? Vielleicht meinen Sie eine Implementierung von Haskell. – ephemient