ライフゲーム #14

前の記事で示したコードの中に少しくどい部分があった。
pos属性をピン留めするために感嘆符を付加するコード、

c:\foo> gvpr -cf vis_alive.g glider_0.gv | gvpr -c "N{pos=sprintf('%s!',pos);}" | ...snip...

は、posがstringなので、

c:\foo> gvpr -cf vis_alive.g glider_0.gv | gvpr -c "N{pos+='!';}" | ...snip...

で済む。

また、cmdとbashの差について述べているが、
bashで感嘆符をエスケープしているコードはそのままcmdでも通るのだった。
つまり、

gvpr -cf vis_alive.g glider_0.gv | gvpr -c "N{pos+='\!';}" | ...snip...

や、

gvpr -cf vis_alive.g glider_0.gv | gvpr -c "N{pos=sprintf('%f,%f\!',xOf(pos)*0.27,yOf(pos)*0.27);}" | ...snip...

はbashでもcmdでも使える。

ちなみに、前の記事ではそういう状況で使われていないので大丈夫だが、
関数xOf()yOf()は"x,y!"のように感嘆符が付いたstringを正しく解釈しないので注意が必要。

gvpr "BEGIN{string pos='2,3\!';print(sprintf('x=%f,y=%f',xOf(pos),yOf(pos)));}"

は、yの解釈を誤り、x=2.000000,y=1.000000を出力する。