掴んだ物(技術)はちゃんと食べる記録帳

興味を持ったものに対する足跡を残していくために作成しました。勉強しながら書いているので、間違いや短絡もあると思います。ご指摘いただけると喜びます。

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

次回は、テキスト描画の基本について、見ていきたいと思います。