So-net無料ブログ作成
検索選択

グローバル変数とローカル変数について [PostScript]

PS BASIC


epitrocoid_00029.png
PostScriptではローカル変数という明確なものはありませんが、辞書機能を利用して変数の有効範囲をシミュレートすることは可能です。
辞書とはキーと値をペアにしたデータの入れ物です。
PostScriptでは
●ユーザー辞書は読み書き可能なローカル辞書で辞書スタックの一番上にあり、カレント辞書となります。
●グローバル辞書は書き込み可能なグローバルな辞書
●システム辞書は読み取り専用のグローバルな辞書でオペレータ名とその値(動作)や定数が格納されています。
この講座ではほとんどグローバル変数しか使用していません。それは短いプログラムなので、ローカル変数を使う必要性を感じていなかったからです。
正しく動作するプログラムを組む時には変数の管理が必要ですので、ローカル変数の指定方法をご紹介します。

(1)辞書に入れる要素数を指定して辞書を作成します。
   例(/xxx 1 dict def)or( 3 dict )
(2)辞書を辞書スタックにプッシュします。(begin)
(3)要素を要素数分、定義します。例(/yy 100 def)
(4)辞書をポップします。(end)
以上で辞書をローカル変数として使用することができます。
要素数は指定した値より多くなっても問題ありません。
言語レベル2以上では要素数を初期値と解釈して動的に拡張してくれます。

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:グローバル変数とローカル変数 %上記イメージとコードは関係ありません。 /test01 0 def % test01に0を入れる(グローバル変数) /testdict 1 dict def % 要素数1のtestdictという名前の辞書を作成 testdict begin % testdictを辞書スタックにプッシュ /test01 100 def % test01に100を入れる(ローカル変数) test01 == % test01を標準出力 結果:100 end %カレント辞書(testdict)をポップする test01 == % test01を標準出力 結果:0 Distillefで開くとジョブログ画面に標準出力の結果が表示されます。 distiller.png またはMacのプレビュー.appで開くとエラーとなりますが、コンソールで標準出力の結果を 見ることができます。 consol.png プロシージャ内で名前のない辞書を作成。 呼び出される毎にメモリを消費するが、変数が毎回初期化されるということと、 名前がないので隠蔽できるメリットがある。 %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:グローバル変数とローカル変数 /test01 0 def % test01に0を入れる(グローバル変数) /test02 2 def % test02に2を入れる(グローバル変数) /testproc { 2 dict begin % 要素数2の辞書を辞書スタックにプッシュ /test01 100 def % test01に100を入れる(ローカル変数) /test02 50 def % test02に50を入れる(ローカル変数) test01 == % test01を標準出力 test02 == % test02を標準出力 end %カレント辞書(testdict)をポップする } def test01 == % test01を標準出力 結果:0 /test01 test02 3 add def % test02に3を足したものをtest01に入れる test01 == % test01を標準出力 結果:5 test02 == % test01を標準出力 結果:2 testproc % 標準出力 結果:100 50

【オペレータの説明】
/キー 値 def
キーと値のペアを辞書に登録します。これは他のプログラムの変数のように使用できます。 /キー { 処理 } def のようにすればプロシージャとなります。プロシージャとは複数の処理をまとめたものです。
整数 dict
整数個(0以上)の要素を持つ空の辞書を作成してオペランドスタックに返す。
(例)/testdict 2 dict def
名前のない辞書を作成することも可能
(例)1 dict begin
辞書 begin
辞書を辞書スタックにプッシュし、カレント辞書に設定する。
(例)testdict begin
end
カレント辞書を辞書スタックからポップし、その下の辞書をカレント辞書に設定する。
/キー load
辞書スタックでキーを検索し、対応する値を返す。
辞書 /キー get
キーに対応する辞書の値を返す。

タグ:PostScript
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:アート

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました