26 lines
741 B
Standard ML
26 lines
741 B
Standard ML
(* CTAK -- A version of the TAK procedure that uses continuations. *)
|
|
|
|
fun ctak_aux (k, x, y, z) =
|
|
let open SMLofNJ.Cont
|
|
in
|
|
if not (y < x)
|
|
then throw k z
|
|
else callcc
|
|
(fn (k) =>
|
|
ctak_aux (k,
|
|
callcc (fn (k) => ctak_aux (k, x-1, y, z)),
|
|
callcc (fn (k) => ctak_aux (k, y-1, z, x)),
|
|
callcc (fn (k) => ctak_aux (k, z-1, x, y))))
|
|
end
|
|
|
|
fun ctak (x, y, z) =
|
|
let open SMLofNJ.Cont
|
|
in callcc (fn (k) => ctak_aux (k, x, y, z))
|
|
end
|
|
|
|
fun ctak_benchmark (n) =
|
|
run_benchmark ("ctak", ctak_iters, fn () => ctak (18, 12, 6),
|
|
fn (x) => x = 7)
|
|
|
|
fun main () = ctak_benchmark (ctak_iters)
|