declare fun {NewMovingAverage} local Old = {NewCell 0.0} New = {NewCell 0.0} Avg = {NewCell 0.0} proc {Put X} {Delay ({OS.rand} mod 30)} Old := @New New := X Avg := (@Old + @New) / 2.0 end fun {Average} {Delay ({OS.rand} mod 30)} @Avg end in movingAvg(put: Put average: Average) end end MA = {NewMovingAverage} thread {MA.put 10.0} end thread {MA.put 20.0} end {Delay ({OS.rand} mod 5)} {Browse {MA.average}}