(* * $Id: methcall.ocaml,v 1.6 2001/01/08 03:08:35 doug Exp $ * http://www.bagley.org/~doug/shootout/ * from: Benedikt Rosenau * with contributions from Markus Mottl *) let print_bool b = print_endline (string_of_bool b) class toggle start_state = object (self) val mutable state = start_state method value = state method activate = state <- not state; self end class nth_toggle start_state max_counter = object (self) inherit toggle start_state val count_max = max_counter val mutable counter = 0 method activate = counter <- counter + 1; if counter >= count_max then begin state <- not state; counter <- 0 end; self end let _ = let n = try int_of_string Sys.argv.(1) with Invalid_argument _ -> 1 in let tog = new toggle true in for i = 2 to n do ignore tog#activate#value done; print_bool tog#activate#value; let ntog = new nth_toggle true 3 in for i = 2 to n do ignore ntog#activate#value done; print_bool ntog#activate#value