%%% $Id: methcall.oz,v 1.0 2002/08/19 16:18:00 dada Exp $
%%% http://dada.perl.it/shootout/
%%%
%%% contributed by Isaac Gouy
%% Usage: start from command line with
%% ozc -x methcall.oz -o methcall.oz.exe
%% methcall.oz.exe 1000000
functor
import System Application
define
class Toggle
attr state: true
meth state(V)
V = @state
end
meth activate
state <- {Not @state}
end
meth init(State)
state <- State
end
end
class NthToggle from Toggle
attr trigger:0 count:0
meth activate
count <- @count + 1
if @count >= @trigger then
state <- {Not @state}
count <- 0
end
end
meth init(State Trigger)
Toggle,init(State)
trigger <- Trigger
count <- 0
end
end
proc {ShowBool X}
if X then {System.showInfo "true"}
else {System.showInfo "false"} end
end
fun {MethodSends N T}
local V in
if N==0 then {T state(V)} V
else
{T activate}{T state(V)}
{MethodSends N-1 T}
end
end
end
in
local Args N in
[Args] = {Application.getArgs plain}
N = {String.toInt Args}
{ShowBool {MethodSends N {New Toggle init(true)}}}
{ShowBool {MethodSends N {New NthToggle init(true 3)}}}
end
{Application.exit 0}
end