(************************************************************ counter2.ml Created : Fri Aug 8 20:16:18 2003 Last modified: Fri Aug 08 21:01:34 2003 Compile: ocamlc counter2.ml -o counter2 # FTP Directory: sources/ocaml # Reference: http://www002.upp.so-net.ne.jp/mamewo/sources/scheme/counter.scm ************************************************************) (* recursive な Variant 型で再帰型を模倣するのじゃ *) type recursive_function = Rec of (unit -> (int * recursive_function)) let rec counter_new init = (init, Rec (fun () -> (counter_new (init + 1)))) let counter_value (v, _) = v let counter_increment (_, Rec f) = f () let _ = print_int (counter_value (counter_increment (counter_increment (counter_increment (counter_new 1))))); print_newline ()