平成7年度 委託研究ソフトウェアの中間報告 |
p(X,Z):- true | q(X,Y), r(Y,Z).について,p, q, r の入出力モードが p(+X,-Z), q(+X,-Y), r(+Y,-Z) である とする。この時 r が q にデータ依存することは明らかであるが,q が r に データ依存しないことは自明ではない。即ち p を呼び出したゴールが,Z->X のデータ・フローを生成している可能性があり,その場合 q あるいはそのサ ブゴールの中断時に r のスケジューリングを行なわないと,デッドロックす る可能性がある。
そこで,q あるいはそのサブゴールが中断した時,r をスケジューリングして も Z が全く具体化されないならば,r をスケジューリングしなくてよい,と いう規則を見い出した。この場合,Z->X のデータ・フローが存在しなければ, 勿論 r をスケジューリングする必要はない。また Z->X のデータ・フローが 存在すれば,r をスケジューリングしてもしなくても,同じ結果(デッドロッ ク)となる。