(* -*- mode: sml -*-
* $Id: nestedloop.smlnj,v 1.3 2001/07/09 00:25:28 doug Exp $
* http://www.bagley.org/~doug/shootout/
*)
structure Test : sig
val main : (string * string list) -> OS.Process.status
end = struct
fun loopF 0 x = x
| loopF n x = loopF (n-1) (x+1)
fun loopE 0 m x = x
| loopE n m x = loopE (n-1) m (loopF m x);
fun loopD 0 m x = x
| loopD n m x = loopD (n-1) m (loopE m m x);
fun loopC 0 m x = x
| loopC n m x = loopC (n-1) m (loopD m m x);
fun loopB 0 m x = x
| loopB n m x = loopB (n-1) m (loopC m m x);
fun loopA 0 m x = x
| loopA n m x = loopA (n-1) m (loopB m m x);
fun atoi s = case Int.fromString s of SOME num => num | NONE => 0;
fun main(name, args) =
let
val arg = hd(args @ ["1"]);
val num = atoi arg;
val result = loopA num num 0
in
print (Int.toString result); print "\n";
OS.Process.success
end
end
val _ = SMLofNJ.exportFn("nestedloop", Test.main);