Haskell 程式計算方法執行時間


在 Haskell 中,我們可以使用 getCurrentTime 和 NominalDiffTime 函式來計算方法的執行時間。在第一個示例中,我們將使用 (startTime <- getCurrentTime 和 endTime <- getCurrentTime) 函式。在第二個示例中,我們將使用 NominalDiffTime 函式。

  • 步驟 1 - 匯入 Data.Time 模組以處理時間。

  • 步驟 2 - 定義 timeFunction 函式,如下所示:

  • 例如 1 -

timeFunction function = do
   startTime <- getCurrentTime
   function
   endTime <- getCurrentTime.
  • 例如 2 & 3 -

timeMethod method = do
   startTime <- getCurrentTime
   result <- method
   endTime <- getCurrentTime.
  • 步驟 3 - 程式執行將從 main 函式開始。main() 函式控制整個程式。它寫成 main = do。它呼叫 timeFunction 和 someFunction 函式。

  • 步驟 4 - 初始化名為“diff”的變數。它將儲存開始時間和結束時間之間的差值。

  • 步驟 5 - 呼叫函式後,將結果執行時間列印到控制檯。

示例 1

在此示例中,timeFunction 函式將 IO 操作作為輸入,並計算執行該操作所需的時間。它透過在執行操作之前和之後獲取當前時間,然後計算時間差來實現此目的。然後,使用 putStrLn 函式將時間差列印到控制檯。在本例中,someFunction 是我們正在計算執行時間的方法。

import Data.Time

someFunction :: IO ()
someFunction = do
   putStrLn "Function completed"

timeFunction :: IO () -> IO ()
timeFunction function = do
   startTime <- getCurrentTime
   function
   endTime <- getCurrentTime
   let diff = diffUTCTime endTime startTime
   putStrLn $ "Execution Time: " ++ (show diff)

main :: IO ()
main = do
   timeFunction someFunction

輸出

Function completed
Execution Time: 0.00012295s

示例 2

在此示例中,我們將瞭解如何計算方法的執行時間。這可以透過使用 NominalDiffTime 函式來完成。

import Data.Time.Clock

timeMethod :: IO a -> IO (a, NominalDiffTime)
timeMethod method = do
   startTime <- getCurrentTime
   result <- method
   endTime <- getCurrentTime
   let diffTime = diffUTCTime endTime startTime
   return (result, diffTime)

main :: IO ()
main = do
   (result, diffTime) <- timeMethod (putStrLn "Hello, world!")
   putStrLn ("Execution time: " ++ show diffTime)

輸出

Hello, world!
Execution time: 0.000132438s

示例 3

在此示例中,該函式使用 Data.Time 模組在執行給定操作之前和之後獲取當前時間,然後計算兩個時間之間的差值以獲取執行時間。該函式返回一個元組,其中包含給定操作的結果和執行時間。

import Data.Time

time :: IO a -> IO (a, NominalDiffTime)
time action = do
   start <- getCurrentTime
   result <- action
   end <- getCurrentTime
   let diff = diffUTCTime end start
   return (result, diff)

main :: IO ()
main = do
   (result, timeTaken) <- time (return "Hello World")
   putStrLn $ "Result: " ++ result
   putStrLn $ "Time taken: " ++ (show timeTaken)

輸出

Result: Hello World
Time taken: 0.000000161s

結論

可以透過多種方式測量方法的執行時間,包括使用程式語言中的內建計時器函式、使用專門的效能測量工具或使用使用者定義的函式。在 Haskell 中,可以透過使用 getCurrentTime 和 NominalDiffTime 函式來計算方法的執行時間。

更新於: 2023年3月27日

710 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告