ジェネレータとevery文
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/19 14:30 UTC 版)
「Icon」の記事における「ジェネレータとevery文」の解説
ジェネレータとは呼び出しごとに値を返す機構である。一見関数と同じに見えるが、返す値が複数であることが大きく違う。 例えば if x = ((1 to 5) | y) then write("True")else write("False") というプログラムがあったときこれはxが1から5またはyと等しいなら「True」そうでなければ「False」を表示するプログラムである。 このジェネレータの値を逐次処理するためのIconの基本ループとしてevery文が存在する。このevery文は例えば every i := 1 to 5 do write(i) と表記すると1~5までの数字を画面に印字する。このevery の後に来る文はジェネレータであればなんでもよいので上の文は every write(1 to 5) と記述しても良い。 なお、ジェネレータは自分で作成することも可能である、単純に返り値をreturnではなくsuspendにすることで実装される。例として奇数を出力し続けるジェネレータは以下のようになる、 procedure odd() x := 1 repeat { suspend x x +:= 2 }end イメージとしてはsuspendは値を返した後、サブルーチンを中断せずに次の処理に移るものである。これを every i := odd() do write(i) と実行した場合、永久に奇数を表示し続ける。
※この「ジェネレータとevery文」の解説は、「Icon」の解説の一部です。
「ジェネレータとevery文」を含む「Icon」の記事については、「Icon」の概要を参照ください。
- ジェネレータとevery文のページへのリンク