私は非常に単純な関数f :: Int -> Int
を持っていて、それぞれn = 1,2,...,max
に対してf
を呼び出すプログラムを書いてみたいと思います。 f
の呼び出しのたびに、その時点までに使用された累積時間が表示されます(n
およびf n
)。これはどのように実装できますか?機能の繰り返しタイミング
私はまだHaskellでは、入力/出力には本当に新しいですので、これは私が(いくつかのおもちゃの例機能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
私はかなりどのように私は表示されませんここにタイミングを導入する必要があります。 (time
用Int
は、おそらく何か他のものに交換する必要があります。)
ベンチマークを特殊なツールに委任する方が良いでしょう。 http://www.serpentine.com/criterion/ – karakfa
このリンクをありがとうございます!今は私にとっては少し難しいようです。そのような考え方を学びたいので、私はまだ基本的なアプローチに固執しようとしています。 – flawr
怠惰な言語でベンチマークを適切に、二重に行うのは難しいです。正確な結果が必要な場合は、独自のロールを提案することはありません。 –