ライフゲーム #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
を出力する。