PostScript

ELVM に PostScript バックエンドを追加してみよう

ELVM に PostScript バックエンドを追加しようとして、make ps は通るようになったけど、make elc-ps が通らない。 どこから手を付ければいいのかもわからないんだけど、どうすりゃいいんだろう。

正月はフラクタル・Mandelbrot 集合

そう言えば PostScript で Mandelbrot 集合を書いたことなかったっけ、ということで、書いてみました。 拡大を続けていくと表示が乱れますが、PostScript の浮動小数点数が単精度なせいです。多分。 最近 PostScript 書いてなかったから随分忘れてしまってま…

ドラゴン曲線を三次元化したい

正月はフラクタルということで、ドラゴン曲線について考えています。ドラゴン曲線を三次元化する場合、直線を立体的に曲げた場合と、平面を曲げた場合、どちらがドラゴンっぽいでしょうか。 ちなみに、ドラゴン曲線は下のような曲線です。A、B、C は下のソー…

トーラス

よくさ、ドラクエの世界は南と北、東と西が繋がってるからドーナツ型だっていうんで普通のドーナツみたいな図を描いて説明するじゃん。こんな感じで。 でもさ、これだとドーナツの内側と外側で一周の長さが全然違うわけさ。で、その違いを小さくしようとした…

正月はフラクタル

という風習についてはこちら。 あけましておめでとうございます - まめめも Koch 曲線 - 週1でも日記 あけましておめでとうございます 2011 - まめめも 以前公務員試験で出題された問題だそうです。 平面上の 3 点 A,B,C を決めます。 ここでは A=(100,100),…

PostScript で条件分岐が複雑になるとネストが深くなって困る。

こんなのを考えてみた。 /cond{ [ exch /exec cvx {} ]cvx 1 exch repeat exec }bind def /;{ exch{ exit }if pop }bind def このように使う。 %!PS /max 100 def 1 { { dup max gt{ pop exit }; dup 15 mod 0 eq{ (FizzBuzz) = }; dup 5 mod 0 eq{ (Buzz) =…

PostScript で条件分岐が複雑になるとネストが深くなって困る。

こんなのを考えてみた。 /cond{ 1 exch repeat exec }bind def /;{ exch{ exit }if pop }bind def このように使う。 %!PS /max 100 def 1 { { dup max gt{ pop exit }; dup 15 mod 0 eq{ (FizzBuzz) = }; dup 5 mod 0 eq{ (Buzz) = }; dup 3 mod 0 eq{ (Fizz…

スクリプト言語間における「lexical closure」の違い─PostScript 版

ネタ元は スクリプト言語間における「lexical closure」の違い、それともプログラムの違い? - karasuyamatenguの日記。(スクリプト言語間における「lexical closure」の違い ― Squeak Smalltalkの場合 - Smalltalkのtは小文字です経由)PostScript なら、…

Ghostscript で引数を読んで階乗を計算するスクリプト。括弧無し。

発端→http://e-arrows.sakura.ne.jp/2010/08/is-lisp-really-has-too-many-parenthesis.html ということで、PostScript でやってみた。 #!/bin/sh true clear %; exec gs -q -dNODISPLAY -dBATCH -d#!=0 -- $0 $@ ARGUMENTS dup length 0 eq /pop cvx 1 1 ar…

PostScript script 第3弾

経緯 id:yshl:20050818:1124357080 id:yshl:20070411:1176291167 id:yshl:20070515:1179199949 最初の 2 行(シェルスクリプトとして起動してすぐ Ghostscript になる部分)は #!/bin/sh true clear %; exec gs -q -dNODISPLAY -dBATCH -d#!=0 -- $0 $@ とす…

数式の文字列を PostScript のプロシージャに変換する

PostScript で何か絵を書こうとすると、長めの数式の計算をすることがあろうかと思いますが、逆ポーランド記法で書かなければならないし、書いた後もそれが正しい式なのか一見して分かりにくく、不便です。例えば、 は以下のようになります。 v 0 get theta …

PostScript で関数書き換え

関数オブジェクトから処理内容を取得して書き換える―を Squeak Smalltalk で - Smalltalkのtは小文字です 経由で ただの言語には興味ありません。この中に「関数オブジェクトから関数の処理内容を取得して書き換えられる言語」「グローバル変数とクロージャ…

ゴルフに使えるかもしれないけど、使い道がすぐには思いつかないオペレータ

kshow 実行可能配列と文字列を引数にとる。文字を表示しつつ、文字と文字の間それぞれで実行可能配列を実行する。実行可能配列を実行する前に、両側の文字コードがスタックに積まれる。 たとえば、wave line の画像版はこんな感じになる。 %!PS gsave /Helve…

下の PostScript を 6 倍ほど高速化できないものか。

の下 1000 桁を計算する(anarchy golf - Modular Exponentiationです)プログラムなのですが、16 秒ほどかかってしまいます。 [2 249{0}repeat]100{[1 4]{/a 2 index def{/b exch def[0 0 1 249{/i exch def 0 i -1 0{/j exch def exch a i j sub get b j g…

余談

hirax.net さんの 1 月 5 日の記事で Tiny_RayTracing.ps を読んでみた。 - 週1でも日記 が紹介されたのですが、私が PostScript でプログラムを書くようになったきっかけの一つが hirax.net さんの日記経由で歪 : PostScriptによるOOP を知った事だったりし…

Koch 曲線

正月はフラクタルという風習があるそうなので、xterm の Tektronix モードを利用してコッホ曲線を描いてみました。 使い方 xterm を起動する。 % xterm -txterm でコマンドを打つ。 % gs -dNODISPLAY -dBATCH koch.psTeraterm にも Tek 端末エミュレーション…

ぽいんと

上の話は、 関数・制御構造と変数のスコープが別物 変数のスコープは begin 〜 end。begin と end 自体は只の命令で、好きな時に実行できる。 ちなみに、関数や制御構造は { 〜 } で表し、正体は命令が並んだ実行可能な配列 変数のスコープをオブジェクトと…

ああそうだ

PostScript でクロージャ - 週1でも日記 の方のクロージャと /let{ 1 dict begin def }def を併用して単一代入っぽい事を実現するというのはどうだろう。(使用上の注意 : 変数のスコープが終わったら let した数だけ end する事)

PostScript で単一代入できないか試したときのアレ

以下の続き http://www.hizum.net/diary/?date=20060913#p01 PostScript の変数の評価 - 週1でも日記 クロージャに実行時の辞書のコピーを残すバージョンはこんな風になります。 /closure{ [ countdictstack array dictstack [ exch{ dup systemdict eq{ cle…

PostScript でクロージャ

歪 : PostScriptでクロージャ を改竄して、 辞書のもっと深いところにある変数も参照する エラーが起こったときに辞書を片付ける ようにしてみた。 /closure{ [ countdictstack array dictstack [ exch{ dup systemdict eq{ cleartomark mark systemdict }if…

Tiny_RayTracing.ps を読んでみた。

Obfuscated PostScript Contest 1993 の BEST OBFUSCATED ARTWORK で 1 位に選ばれた早川たかし氏の Tiny_RayTracing.ps を読んでみました。 プログラムは http://web.mit.edu/PostScript/obfuscated-1993/Tiny_RayTracing.ps を見てください。

ASCII85 エンコーダ & デコーダ

自前で base85 エンコーディングを書きたくないとき PostScript で Helloworldless Hello world を書く必要に迫られたとき などにご利用ください。 エンコーダ #!/bin/sh exec gs -q -dNODISPLAY -dBATCH -D#!="{2{currentfile 128 string readline pop pop}…

ラングトンの蟻

わくわくパズルランド (岩波ジュニア新書) の「一歩進んで曲がる」や XScreenSaver の Ant は「ラングトンの蟻」と呼ばれるものだという事を おそらくはそれさえも平凡な日々: JavaScriptでラングトンの蟻 で知った記念で、PostScript でラングトンの蟻を書…

どう書く.org

以前書いたローレンツアトラクタをどう書く.org に投稿してみた。 参考ページに以前書いたときの URL を書いておいたのだけど、ページタイトルを空欄にしてしまい、リンクがたどりにくい物になってしまった。

改良してみた

図の位置と大きさの調整は、パラメトロン計算機: 多面体描画道楽 でも紹介されている concat を使うと便利です。 平行移動だけなら translate、スケールの変更だけなら scale を使うといいです。 但し、線の太さが変わるので注意。 yz平面に対して反転するよ…

PostScript だけで正十二面体

約 1ヶ月前の話題である パラメトロン計算機: 多面体描画道楽 と 2009-03-08 の蒸し返しですが、 PostScript だけで正十二面体を書いてみました。 まず、shinichiro_hさんのコードをほぼ直訳するとこんな感じになります。

C99 には digraph というものがあるそうだ

%: が # になるということなので、C99 と PostScript の Polyglot はこういう風にも書ける。 %:include<stdio.h> %:if 0 (Hello, world!)= ( %:else int main() { puts("Hello, world!"); return 0; } %:endif %:if 0 ) pop %:endif PostScript で色付け %:include<stdio.h> %:</stdio.h></stdio.h>…

anarchy golf - bubble sort

なるほど、PostScript ゴルフで moveto で数値保存、rmoveto で加減算、currentpoint で数値の取り出しをするというテクニックは、こういう問題のような場合に使うといいのか。(参照 ySas さんの解)

Quine

2008-11-02 について Forth とか PostScript とかでの事情 文字列をプログラム中に書くような形式で表示 一度目に読んだときは、 PostScript の == みたいに、文字列をプログラム中に書くような形式で表示してくれる関数/命令/機能がある、というパターンが…

Ghostscript のバージョン依存性

いろいろなオブジェクトを文字列に変換する命令 cvs や、数を n 進数で表した文字列に変換する命令 cvrs を使うときには文字列を格納するバッファを用意してやらなきゃいけない事はすでに常識ですが、そのバッファが足りなかった場合の振る舞いは Ghostscrip…