Let's PostScript(6) 繰り返し処理と算術オペレータ
繰り返し処理と算術オペレータ
PostScriptの繰り返し処理を順番に紹介すると同時に、その中で算術オペレータも使っていこうと思います。
一番わかりやすいのはrepaetオペレータだと思います。このようなものです。
回数 手続きObject repeat
repeatオペレータは整数の回数を受け取り、その回数分だけ手続きObjectを実行します。スクリプトにすると以下のような感じになります。 addオペレータは見れば自明だと思うので説明しません。
GS>1 GS<1>5 {dup 1 add} repeat GS<6>stack 6 5 4 3 2 1
制限値になるまで繰り返すような処理の場合、forオペレータが向きます。
初期値 増分値 制限値 手続きオブジェクト
repeatオペレータと違い、forオペレータは増分した値をOperandStackに格納します。以下に一例を示します。
GS>1 2 10 {} for GS<5>stack 9 7 5 3 1
なので、例えば30°ごとのsin値を知りたいというのであれば以下のようなスクリプトになります。
GS>0 30 360 {sin} for GS<13>stack 0.0 -0.5 -0.866025 -1.0 -0.866025 -0.5 0.0 0.5 0.866025 1.0 0.866025 0.5 0.0
特定の条件を満たすまで処理を繰り返し続けるような処理に対しては、loopオペレータとexitオペレータを用います。
手続きObject loop
exit
で、exitが呼ばれるまでloopオペレータは手続きOjbectを繰り返し実行し続けます。exitオペレータが呼ばれない場合、無限ループとなるので注意が必要です。 例として、(iida)の文字列ObjcetをOperandStackがなくなるまで探索するスクリプトを示します。
GS>(kato) (ohyama) (iida) (konishi) GS<4>{count 0 eq {exit} {(iida) eq {exit} if} ifelse} loop GS<2>stack ohyama kato
次回は、テキスト描画の基本について、見ていきたいと思います。