---------------------------------------------------------------- node COUNT(init,incr:int;reset:bool) returns (n:int); let n = init -> if reset then init else pre(n)+incr; tel ---------------------------------------------------------------- node TWO_STATES (init,set,reset:bool) returns (state:bool); let state = init -> if set and not pre(state) then true else if reset and pre(state) then false else pre(state); tel ---------------------------------------------------------------- -- node stopwatch (start_stop,reset: bool) returns (time:int); -- var CK, running: bool; -- let -- time = current(COUNT((0,1,reset) when CK)); -- CK = true -> running or reset; -- running = TWO_STATES(false, start_stop, start_stop); -- tel ---------------------------------------------------------------- -- first attempt: ---------------------------------------------------------------- node stopwatch (start_stop,reset: bool) returns (time:int); var CK, running: bool; let time = 0 -> if CK then COUNT(0,1,reset) else pre time; CK = true -> running or reset; running = TWO_STATES(false, start_stop, start_stop); tel