Ich habe eine sehr einfache Funktion und ich möchte ein Programm schreiben, das f
für jeden n = 1,2,...,max
aufruft. Nach jedem Aufruf von f
sollte die bis dahin verwendete (kumulierte) Zeit angezeigt werden (zusammen mit n
und f n
). Wie kann dies umgesetzt werden?Wiederholtes Timing der Funktion
Ich bin immer noch wirklich neu zu Eingabe/Ausgabe in Haskell, so ist dies, was ich bisher versucht (mit etwas Spielzeug Beispielfunktion f
)
f :: Int -> Int
f n = sum [1..n]
evalAndTimeFirstN :: Int -> Int -> Int -> IO()
evalAndTimeFirstN n max time =
if n == max
then return() -- in the following we have to calculate the time difference from start to now
else let str = ("(" ++ (show n) ++ ", " ++ (show $ f n) ++ ", "++ (show time)++ ")\n")
in putStrLn str >> evalAndTimeFirstN (n+1) max time -- here we have to calculate the time difference
main :: IO()
main = evalAndTimeFirstN 1 5 0
ich recht sehe nicht, wie ich Ich muss das Timing hier vorstellen. (Die Int
für time
muss wahrscheinlich durch etwas anderes ersetzt werden.)
Es ist wahrscheinlich besser, Benchmarking an ein spezialisiertes Tool, z. http://www.serpentine.com/criterion/ – karakfa
Vielen Dank für diesen Link! Es scheint mir ein bisschen zu schwierig zu sein, also denke ich, dass ich immer noch versuche, einen grundlegenden Ansatz zu verfolgen, bevor ich solche Bibliotheken benutze, weil ich lernen will, wie man so denkt. – flawr
Es ist schwierig, Benchmarking richtig und doppelt so in einer faulen Sprache durchzuführen. Wenn Sie genaue Ergebnisse wünschen, empfehle ich nicht, Ihre eigenen zu rollen. –