PostScriptの上のLispの上のPostScript
昨日はPostScriptでLispインタプリタをつくり、それを用いLispインタプリタをつくりました。
そして今日は、PostScriptでつくったLispインタプリタを用い、PostScriptインタプリタをつくりました。
- PostScriptインタプリタ (pslisp用のプログラム。普通のSchemeインタプリタでも運がよければ動くかも?)
- pslisp (昨日から結構手を加えました。)
実際にpslispで動かす際には改行を空白に置き換え、1行で記述してください。
PostScriptをつくったといっても、もちろんそのごく一部だけで、
図形も何も描けません。ただ計算ができるだけで、
実際につくったのは以下の機能だけです。
- 四則演算(add, sub, mul, div)
- スタック操作の一部(dup, exch, pop)
- 条件分岐(if, ifelse)
- 変数の定義(def)
- 数値比較(eq)
上記のソースを利用してPostScriptのプログラムを書くには次のように、
(postscript ‘(プログラム))
を評価します。
(PostScriptインタプリタのソースの最後に実際にこれが記述してあります。)
(postscript '( /fact { dup 0 eq { pop 1 } { dup 1 sub fact mul } ifelse } def 10 fact ))
ここでは10の階乗を求めるPostScriptのプログラムを書いています。
「PostScriptの1トークン = Lispの1シンボル」として読み込ませているので、
トークンとトークンの間には必ず空白を入れる必要があります。
全くもって使い道のないものをつくってしまいましたが、
大学の試験が近づいていることから逃避することによって発生するエネルギーを、
プログラミングによって発散した結果、生まれてしまったかわいそうなプログラムなので、
どうか生暖かい目で見守ってください。