PostScript でクロージャ

歪 : PostScriptでクロージャ を改竄して、

  • 辞書のもっと深いところにある変数も参照する
  • エラーが起こったときに辞書を片付ける

ようにしてみた。

/closure{
    [
        countdictstack array dictstack
        [
            exch{
                dup systemdict eq{
                    cleartomark mark systemdict
                }if
            }forall
        ]
        {
            begin
        }/forall cvx
        counttomark 2 add -1 roll
        /stopped cvx
        4 index length{
            end
        }/repeat cvx
        {
            stop
        }/if cvx
    ]cvx
}def
/make-ax+b{
    1 dict begin
        /b exch def
        1 dict begin
            /a exch def
            {
                a mul b add
            }closure
        end
    end
}def
/ax+b 10 3 make-ax+b def
10 ax+b =   % 103 を表示