structure Tak =
   struct
      fun tak1 (x, y, z) =
	 let
	    fun tak2 (x, y, z) =
	       if y >= x
		  then z
	       else
		  tak1 (tak2 (x - 1, y, z),
			tak2 (y - 1, z, x),
			tak2 (z - 1, x, y))
	 in
	    if y >= x
	       then z
	    else
	       tak1 (tak2 (x - 1, y, z),
		     tak2 (y - 1, z, x),
		     tak2 (z - 1, x, y))
	 end
   end

val rec f =
   fn 0 => ()
    | n => (Tak.tak1 (18, 12, 6) ; f (n-1))

val _ = f 5000
