(* * $Id: objinst.ocaml,v 1.8 2001/07/28 21:52:59 doug Exp $ * http://www.bagley.org/~doug/shootout/ * from: Benedikt Rosenau * with contributions from Markus Mottl *) 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 n = if Array.length Sys.argv > 1 then int_of_string Sys.argv.(1) else 1 let tog = new toggle true;; for i = 1 to 5 do Printf.printf "%b\n" tog#activate#value done; for i = 1 to n do ignore (new toggle true) done; print_newline (); let ntog = new nth_toggle true 3 in for i = 1 to 8 do Printf.printf "%b\n" ntog#activate#value done; for i = 1 to n do ignore (new nth_toggle true 3) done