case Suspend
(k
) => k
().
run }
}
def normal
(n
: Int
) : Int
=
def cps
(n
: Int
) : Int
= { def loop
(i
: Int, k
: Int
=> TailRec
[Int
]) : TailRec
[Int
] = else loop
(i -
1, x
=> Suspend
(() => k
(1 + x
)))
loop(n, t => Return(t)).run
}
def accum
(n
: Int
) : Int
= { def loop
(i
: Int, a
: Int
) : Int
=
loop(n, 0)
}
def main
(args
: Array
[String
]) : Unit
= { def getTime
[A
] (f
: A
=> Any, i
: A, n
: Int
) : Double
= { val s
= System.
currentTimeMillis() f(i)
(System.currentTimeMillis() - s).toDouble / n.toDouble
}
print(s"${getTime(accum, pow(10, i).toInt, 10)},")
println()
print(s"${getTime(cps, pow(10, i).toInt, 10)},")
}
}
aW1wb3J0IHNjYWxhLm1hdGgucG93CgpzZWFsZWQgdHJhaXQgVGFpbFJlY1tBXSB7CiAgZmluYWwgZGVmIHJ1biA6IEEgPSB0aGlzIG1hdGNoIHsKICAgIGNhc2UgUmV0dXJuKHYpICA9PiB2CiAgICBjYXNlIFN1c3BlbmQoaykgPT4gaygpLnJ1bgogIH0KfQogCmNhc2UgY2xhc3MgUmV0dXJuW0FdKHYgOiBBKSBleHRlbmRzIFRhaWxSZWNbQV0KY2FzZSBjbGFzcyBTdXNwZW5kW0FdKHJlc3VtZSA6ICgpID0+IFRhaWxSZWNbQV0pIGV4dGVuZHMgVGFpbFJlY1tBXQogCm9iamVjdCBNYWluIHsKICBkZWYgbm9ybWFsIChuIDogSW50KSA6IEludCA9CiAgICBpZiAobiA9PSAwKSAwCiAgICBlbHNlIDEgKyBub3JtYWwobiAtIDEpCiAKICBkZWYgY3BzIChuIDogSW50KSA6IEludCA9IHsKICAgIGRlZiBsb29wIChpIDogSW50LCBrIDogSW50ID0+IFRhaWxSZWNbSW50XSkgOiBUYWlsUmVjW0ludF0gPQogICAgICBpZiAoaSA9PSAwKSBrKDApCiAgICAgIGVsc2UgbG9vcChpIC0gMSwgeCA9PiBTdXNwZW5kKCgpID0+IGsoMSArIHgpKSkKIAogICAgbG9vcChuLCB0ID0+IFJldHVybih0KSkucnVuCiAgfQogCiAgZGVmIGFjY3VtIChuIDogSW50KSA6IEludCA9IHsKICAgIGRlZiBsb29wIChpIDogSW50LCBhIDogSW50KSA6IEludCA9CiAgICAgIGlmIChpID09IDApIGEKICAgICAgZWxzZSBsb29wKGkgLSAxLCBhICsgMSkKIAogICAgbG9vcChuLCAwKQogIH0KIAogIGRlZiBtYWluKGFyZ3MgOiBBcnJheVtTdHJpbmddKSA6IFVuaXQgPSB7CiAgICBkZWYgZ2V0VGltZVtBXSAoZiA6IEEgPT4gQW55LCBpIDogQSwgbiA6IEludCkgOiBEb3VibGUgPSB7CiAgICAgIHZhbCBzID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkKICAgICAgZm9yIChfIDwtIDEgdG8gbikKICAgICAgICBmKGkpCgogICAgICAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzKS50b0RvdWJsZSAvIG4udG9Eb3VibGUKICAgIH0KCiAgICBmb3IgKGkgPC0gMiB0byA3KQogICAgICBwcmludChzIiR7Z2V0VGltZShhY2N1bSwgcG93KDEwLCBpKS50b0ludCwgMTApfSwiKQoKICAgIHByaW50bG4oKQoKICAgIGZvciAoaSA8LSAyIHRvIDcpCiAgICAgIHByaW50KHMiJHtnZXRUaW1lKGNwcywgcG93KDEwLCBpKS50b0ludCwgMTApfSwiKQogIH0KfQ==
0.0,0.1,0.0,0.3,2.6,13.1,
0.5,0.5,0.9,17.7,242.7,