procedure main() every write( filter(even, ten) ) # every write( LoopingFilter(even, ten) ) end procedure filter( p, g ) every suspend(p(g())) end procedure LoopingFilter( p, g) local x while x:=g() do # enters an infinite loop { write("x=", x); if p(x) then suspend(x) } end procedure even(n) return( ((n/2)*2) = n ) end procedure ten() suspend(ints(10)) end procedure ints(max) local i; i:=1; while i<=max do { suspend(i); i +:= 1 } end