func metronome (beats_per_minute = 72, beats_per_bar = 4) { var counter = 0 var duration = 60/beats_per_minute var base_time = Time.micro+duration STDOUT.autoflush(true) for next_time in (base_time..Inf `by` duration) { if (counter++ %% beats_per_bar) { print "\nTICK" } else { print " tick" } Sys.sleep(next_time - Time.micro) } } say metronome(ARGV.map{ Num(_) }...)