ゴルフに使えるかもしれないけど、使い道がすぐには思いつかないオペレータ
kshow
実行可能配列と文字列を引数にとる。文字を表示しつつ、文字と文字の間それぞれで実行可能配列を実行する。実行可能配列を実行する前に、両側の文字コードがスタックに積まれる。
たとえば、wave line の画像版はこんな感じになる。
%!PS gsave /Helvetica findfont 10 scalefont setfont 5 15 moveto { 2 copy ne{ lt{ 0 10 }{ 0 -10 }ifelse rmoveto }if }(31415926535897932384626433832795028)kshow grestore
currentpoint が決まっていないと使えない、ループの対象が文字列だけ、という(当然の)制限があり、使いどころが難しい。 Bronspeak あたりなら有効活用できるかもしれない。
defineuserobject, execuserobject
非負整数 n と任意のオブジェクト a を引数をスタックに置き、defineuserobject を実行すると、UserObjects という配列の n 番目に a が代入される。UserObjects は自動的に作られ、長さが足りなければ自動的に伸ばされる。さらに、n をスタックに置いて execuserobject を実行すると、a が実行される。
例
10 (Hello, World!\n) defineuserobject 10 execuserobject % 文字列 (Hello, World!) がスタックにプッシュされる print 11 {(Hello, world!\n)print} defineuserobect 11 execuserobject % {(Hello, world!\n)print} が実行される
実行結果
Hello, World! Hello, world!
名前をつけて後で使用するだけなら def を使った方がいい。使いどころとしては、ソートキーが非負整数で同じ数が存在しない場合のバケットソートくらいかな?
あ、だめだ
kshow も defineuserobject もバイナリ化できない。