gvprプログラムのN節の述部の!
題記そのままの事柄についてである。
一部のノードに対して属性aが設定されたグラフを次のようなgvprプログラムに与える。
$ gvpr " > N [a] { > print('[a] ', name, ' has attrib a=', a); > } > > N [!a] { > print('[!a] ', name, ' doesn\'t have attrib a'); > } > > N { > print(' ', name, ' is a node'); > } > > " << foo > graph { > a [a=1]; > b [a=2]; > c; > d [a=0]; > e [a=""]; > f [a=null]; > } > foo [a] a has attrib a=1 a is a node [a] b has attrib a=2 b is a node [!a] c doesn't have attrib a c is a node d is a node [!a] e doesn't have attrib a e is a node [a] f has attrib a=null f is a node
属性aが与えられていないノードcやeは述部が !a のN節のアクションをキックする。
注目すべきは属性aの値が0の場合である。
このノードは述部が a のN節にも !a のN節にも引っ掛からない。
値が0の属性aはaでも!aでもないということになる。
もちろん、aの値が0であることから、
$ gvpr " > N [a == 0] { > print('[a == 0] ', name, ' has attrib a=', a); > } > > N [a != 0] { > print('[a != 0] ', name, ' has attrib a=', a); > } > > " << bar > graph { > a [a=1]; > b [a=2]; > c; > d [a=0]; > e [a=""]; > f [a=null]; > } > bar [a != 0] a has attrib a=1 [a != 0] b has attrib a=2 [a == 0] c has attrib a= [a == 0] d has attrib a=0 [a == 0] e has attrib a= [a != 0] f has attrib a=null
のように、ノードdは確かに述部a == 0のアクションを呼び出す。
ただし、今度は属性aを持たないノードcやノードeもこれに反応してしまう。