Import Upstream version 20180207
[hcoop/debian/mlton.git] / doc / examples / profiling / fib-tak.sml
CommitLineData
7f918cf1
CE
1structure Profile = MLton.Profile
2
3val fibData = Profile.Data.malloc ()
4val takData = Profile.Data.malloc ()
5
6fun wrap (f, d) x =
7 Profile.withData (d, fn () => f x)
8
9val rec fib =
10 fn 0 => 0
11 | 1 => 1
12 | n => fib (n - 1) + fib (n - 2)
13val fib = wrap (fib, fibData)
14
15fun tak (x,y,z) =
16 if not (y < x)
17 then z
18 else tak (tak (x - 1, y, z),
19 tak (y - 1, z, x),
20 tak (z - 1, x, y))
21val tak = wrap (tak, takData)
22
23val rec f =
24 fn 0 => ()
25 | n => (fib 38; f (n-1))
26val _ = f 2
27
28val rec g =
29 fn 0 => ()
30 | n => (tak (18,12,6); g (n-1))
31val _ = g 500
32
33fun done (data, file) =
34 (Profile.Data.write (data, file)
35 ; Profile.Data.free data)
36
37val _ = done (fibData, "mlmon.fib.out")
38val _ = done (takData, "mlmon.tak.out")