procedure main(A) sma := buildSMA(3) # Use better name than "I". every write(sma(!A)) end procedure buildSMA(P) local stream c := create { stream := [] while n := (avg@&source)[1] do { put(stream, n) if *stream > P then pop(stream) every (avg := 0.0) +:= !stream avg := avg/*stream } } return (@c, c) end