Icon
ジェネレータとは呼び出しごとに値を返す機構である。一見関数と同じに見えるが、返す値が複数であることが大きく違う。
例えば
というプログラムがあったときこれはxが1から5またはyと等しいなら「True」そうでなければ「False」を表示するプログラムである。
このジェネレータの値を逐次処理するためのIconの基本ループとしてevery文が存在する。このevery文は例えば
と表記すると1~5までの数字を画面に印字する。このevery の後に来る文はジェネレータであればなんでもよいので上の文は
と記述しても良い。
なお、ジェネレータは自分で作成することも可能である、単純に返り値をreturnではなくsuspendにすることで実装される。例として奇数を出力し続けるジェネレータは以下のようになる、
イメージとしてはsuspendは値を返した後、サブルーチンを中断せずに次の処理に移るものである。これを
と実行した場合、永久に奇数を表示し続ける。