(57)【要約】      （修正有）【課題】複数の演算数を取得するために、要求の並列の発行を含む、式を評価するための方法。【解決手段】演算数の第一のサブセットを受信した場合、上記演算数の第二のサブセットが、特定の期間に対する演算数をもはや必要としないとの決定が行われた場合には、その特定の期間に対する第二のサブセットに対する要求が取消される。一方の演算数が特定の期間に対するエラー表示を含んでいる場合には、本発明の方法は、その特定の期間に対する他方の演算数に対する要求を依然として行い、他方の演算数に対する要求取消される場合だけ、その特定の期間に対する「エラー」を送り返す。【選択図】図１
2007018521.tif 000002
【特許請求の範囲】
【請求項１】
データ処理方法であって、
（ａ）ある式を評価するために、複数の演算数を取得するため、並列に要求を発行するステップと、
（ｂ）前記演算数の第一のサブセットを受信した場合に、前記式を評価するために、前記演算数の第二のサブセットを依然として必要とするかどうかを検出するステップと、
（ｃ）前記第二のサブセットをもはや必要としない場合には、前記第二のサブセットに対する要求を取消すステップとを含む方法。
【請求項２】
請求項１に記載のデータ処理方法において、前記演算数が、一つまたはそれ以上の数値例のシーケンスを含んでいる場合に、各数値例が、データ時間、スタート時間および終了時間を含み、前記スタート時間および終了時間が、データ項目が有効な時間の長さを定義するステップを含む方法。
【請求項３】
請求項２に記載のデータ処理方法において、
（ａ）演算数の前記第一のサブセットを受信した場合に、特定の期間に関する演算数の前記第二のサブセットをもはや必要としないことを検出するステップと、
（ｃ）前記特定の期間に対する、演算数の第二のサブセットに対する要求を取消すステップとを含む方法。      
【請求項４】
請求項１乃至３の何れかに記載のデータ処理方法において、一方の演算数が特定の期間に対するエラー表示を含んでいる場合に、前記方法が、その特定の期間に対する他方の演算数に対する要求を継続した行い、前記他方の演算数に対する要求が取消される場合だけ、その特定の期間に対するエラーを送り返す方法。
【請求項５】
請求項１乃至３の何れかに記載のデータ処理方法において、
（ａ）評価結果を表わすルート・ノードと、前記演算数を表わす葉のノードと、演算子を表わす中間ノードとを含む、ある式をデータ・フローチャートへ変換するステップと、
（ｂ）どの演算数が必要なのかを示す要求メッセージをデータ・フローチャートを通して葉のノードの方向へ送るステップと、
（ｃ）要求メッセージが葉のノードに到着した場合、演算数を取得し、前記葉のノードが取得した演算数の数値を含むデータ・メッセージをデータ・フローチャートを通してルート・ノードの方向へ送るステップと、
（ｄ）データ・メッセージが中間ノードに到着した場合、そのノードが、依然として演算数を必要としているかどうかを判断し、前記演算数がもはや必要とされていない場合には、取消メッセージをデータ・フローチャートを通して前記葉のノードの方向に送るステップとを含む方法。
【請求項６】
請求項１乃至５の何れかに記載の方法を実行するためのデータ処理装置。
【請求項７】
請求項１乃至５の何れか１つに記載の方法を実行するためのコンピュータ・プログラムを内蔵するデータ・キャリヤ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを処理するための装置および方法に関する。
【背景技術】
【０００２】
データ処理は、多くの場合、構文法の指定のルールに従って、演算数の数値と演算子とを組合せて形成した式の評価を含む。例えば、式（Ａ  ａｎｄ  Ｂ）  ｏｒ  （ｎｏｔ  Ｃ）の場合には、演算数Ａ、ＢおよびＣと論理演算子「ａｎｄ
」（論理積）、「ｏｒ」（論理和）および「ｎｏｔ」（論理否定）を含む。式の評価を行った場合、その結果得られた数値が得ることができるが、上記式の場合には、その数値は「ｔｒｕｅ」(真）または「ｆａｌｓｅ」(偽)である。
多くのデータ処理の場合、演算数の数値を取得するのに掛かる時間の長さは、予測することができない。ある場合には、（例えば、演算数の数値がキャッシュ・メモリにすでに保持されている場合には）数ミリ秒で入手できる場合もあるし、一方、他の場合には、（例えば、顧客からの情報を郵便により入手しなければならない場合には）、数週間掛かる場合もある。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
本発明の目的は、上記のように演算数の数値を取得するのに要する時間の長さを予測できない式を処理するための、新規な装置および方法を提供することである。
【課題を解決するための手段】
【０００４】
本発明のデータ処理方法は、
（ａ）ある式を評価するために、複数の演算数を取得するため、並列に要求を発行するステップと、
（ｂ）前記演算数の第一のサブセットを受信した場合に、前記式を評価するために、前記演算数の第二のサブセットを依然として必要とするかどうかを検出するステップと、
（ｃ）前記第二のサブセットをもはや必要としない場合には、前記第二のサブセットに対する要求を取消すステップとを含む。
【０００５】
本発明は、また、上記方法を実行するための処理装置も含む。
【発明を実施するための最良の形態】
【０００６】
添付の図面を参照しながら、以下に本発明のデータ処理装置および方法を説明するが、この説明は、単に例示としてのものに過ぎない。
【０００７】
図１について説明すると、この図は、式評価機構１１、データベース１２およびユーザ・インターフェース１３を含むコンピュータ・システム１０である。上記機構１１としては、特殊目的のハードウェアを使用することができるが、この実施形態の場合には、上記機構は、式を評価するために、特殊目的のソフトウェアを実行する従来のコンピュータ処理ハードウェアを備える。上記式評価機構１１は、式中の文字からか、データベースからか、またはユーザ・インターフェースから、一つまたはそれ以上の演算数の数値を受け取り、一つまたはそれ以上の結果としての数値を作成する。上記の結果としての数値は、その後、データベースに記憶することもできるし、および／またはユーザ・インターフェースにより、ユーザに表示することもできる。
【０００８】
以下に説明するように、演算数の各数値は、ある時点で評価される。すなわち、演算数の上記各数値は、それが表わす物事の数値の履歴を含む。式評価機構は、演算数の時間による変化を考慮に入れ、同様に、ある時点で評価された結果としての数値を作成する。
【０００９】
一般的にいって、演算数の数値を取得するのに掛かる時間の長さは、予測することができない。ある場合には、数ミリ秒（例えば、演算数の数値がキャッシュ・メモリにすでに保持されている場合）で入手できる場合もあるし、一方、他の場合には、数週間（例えば、顧客からの情報を郵便により入手しなければならない場合）掛かる場合もある。以下に説明するように、本システムは、念入りなものではあるが、厳密ではない評価方法を採用している。というのは、（例えば、「ａｎｄ」（論理積）演算子の両方の独立変数を並列に評価するような）念入りな方法で式が評価され、（例えば、「論理積｝演算子の独立変数の一方が偽であることが分かった時のように）評価の任意の部分が必要でないことを決定するために、充分な情報を入手できないことが分かった場合、すぐに不必要な活動を打ち切ることを意味する。
【００１０】
各演算子および結果としての数値は、一つまたはそれ以上の数値例のシーケンスにより表わされる。各数値例は、下記の一つの集合からなる。
【００１１】
｛“ｖ”、時間＿開始、時間＿終了｝
【００１２】
“ｖ”フィールドは、整数、小数、ストリング、リストまたは日付のような、多数の原始的なデータ・タイプの一つの一例であるデータ項目を含む。
【００１３】
時間＿開始フィールドは、データ項目が有効な期間の始まりを示す。
【００１４】
時間＿終了フィールドは、データ項目が有効な期間の終わりを示す。
【００１５】
集合は、また、さらに、上記集合の情報源、または情報の信頼性の程度を示すフィールドのような情報（図示せず）を含む。
【００１６】
この実施形態の場合には、時間＿開始および時間＿終了は、簡単なデータ・フォーマット(dd/mm/yyyy)に指定される。上記期間は、開始の日付および終了の日付を含む。特殊な日付数値「ｔｏｐ」（一番上）および「ｂｏｔｔｏｍ」（一番下）は、仮定の最大および最小日付を表示するために予約される。
【００１７】
ある数値内の数値例は、最も新しい数値例が最初にくるように時間的な順序に配列されるが、この順序は反対にすることができる。しかし、最も新しいものが最初にくる配列は、多くの使用シナリオによりよく適合する。例えば、より新しいデータは、より正確で、関連性を持つ可能性が高い。
【００１８】
例えば、ある人の給与は、下記の順序の集団で表わすことができる。
{{6000,6/5/1994,top},{0,2/1/1994,5/5/1994},{5000,2/1/1990,1/1/1994}}
【００１９】
この集団は、その人の給与が、１９９０年１月２日から、１９９４年１月１日まで５０００であり、１９９４年１月２日から１９９４年５月５日までゼロであり、１９９４年５月６日以降は６０００であることを示す。
【００２０】
下記の理由の一つにより、特定の期間の間のある数値は指定することができない。
【００２１】
・すなわち、その数値が関連する対象物が、その期間内に存在しなかった。例えば、ある人の誕生日が、その日付けの前の期間に対して指定されていない場合である。
【００２２】
・その期間に対する数値例がまだ決まっていなかった。
【００２３】
・ある数値例が削除されていた。
【００２４】
例えば、上記例の場合には、給与の数値が、１９９０年１月１日を含むこの日付までの期間に対して指定されていない。
【００２５】
ある数値は、一つまたはそれ以上の数値例を含む。それらは、「ｖ」フィールド内の「エラー」コードにより表示される。エラー数値例は、（ゼロで割ろうとするような）計算上のエラーの結果、またはストリング・データ項目上に対して、算術演算を行おうとしたというような、タイプ違反の結果、発生する場合がある。
【００２６】
数値は、演算子により式の形になる。演算子のいくつかの例について説明する。これらすべての演算子は、演算数としてある時間に評価された数値をとり、結果としてある時間に評価された数値を作成する。
【００２７】
＜単一演算子＞
単一演算子（すなわち、一つだけ演算数を持つ演算子）は、「ｎｏｔ」（論理否定）演算子および単一のマイナス演算子を含む。上記演算子は、同じ数の数値例を含む結果を得るために、順次、上記演算数の各数値例に適用される。例えば、下記式は、
not{{true,2/1/1992,top},{false,1/1/1986,1/1/1992}}
下記式に示す結果となる。
{{false,2/1/1992,top},{true,1/1/1986,1/1/1992}}
【００２８】
＜二項演算子＞
二項演算子（すなわち、二つの演算数を持つ演算子）は、＝＝（...に等しい ）、！＝（...に等しくない）、＜（...より少ない）、＞（...より多い）、＞ ＝（...より大きいか等しい）および＝（...より少ないか等しい）のような論理演算子、＋（加算）、−（引き算）、＊（かけ算）、／（割り算）のような算術演算子、および「ａｎｄ」（論理積）および「ｏｒ」（論理和）のような論理演算子を含む。
【００２９】
上記二項演算子への一般的なアプローチは、上記二つの演算数の数値例をとり、各演算数が一定の数値を持つ一組の期間を作るために、それらを結合するという方法である。
【００３０】
例えば、下記式は、
{{10,1/1/1990,1/1/1995}} 
+ {{20,1/1/1980,1/1/1990},{25,2/1/1990,1/1/1993}}
下記式に示す結果となる。
{{30,1/1/1990,1/1/1990},{35,2/1/1990,1/1/1993}}
【００３１】
演算子「ａｎｄ」（論理積）、「ｏｒ」（論理和）、「＊」および「／」は、ある状況の下では制限を持たず、結果を得るために両方の演算数を取得する必要はない。
【００３２】
・「ａｎｄ」（論理積）演算子の場合には、いづれかの演算数が、特定の期間の間、「偽」であることが分かった場合には、その期間についてのもう一つの演算数の取得は放棄される。
【００３３】
・「ｏｒ」（論理和）演算子の場合には、いづれかの演算数が、特定の期間の間、「真」であることが分かった場合には、その期間についてのもう一つの演算数の取得は放棄される。
【００３４】
・「＊」演算子の場合には、いづれかの演算数が、特定の期間の間、「ゼロ」であることが分かった場合には、その期間についてのもう一つの演算数の取得は放棄される。
【００３５】
・「／」演算子の場合には、第一の演算数が、特定の期間の間、「ゼロ」であることが分かった場合には、その期間についての第二の演算数の取得は放棄される。
【００３６】
例えば、「ａｎｄ」（論理積）式の一つの演算数が数値を持っていることが分かった場合には、下記式の場合、
{{true,2/1/1992,top},{false,1/1/1986,1/1/1992}}
【００３７】
［１９８６年１月１日、１９９２年１月１日］の期間についてのもう一つの演算数の取得は放棄される。何故なら、他方の演算数の数値が何であれ、その期間内の結果が必ず「偽」になることが分かっているからである。しかし、［１９９２年２月１日、一番上］の期間についての他の演算数を依然として取得する必要がある。
【００３８】
＜「Ｉｆ」演算子＞
「ｉｆ」演算子に対する構文法は下記の通りである。
if<expr1> then <expr2> [else <expr3>] endif
【００３９】
上記式は、＜ｅｘｐｒ１＞の各数値例を取り、その数値例が「真」であるか、「偽」であるかにより、＜ｅｘｐｒ２＞または ＜ｅｘｐｒ３＞を評価すること により評価される。「ｅｌｓｅ」分岐は、角括弧で示す通り、オプションである。
【００４０】
例えば、上記式は、
ｉｆ（下記式の場合には、）
{{true,1/1/1996,1/1/1997},{false,1/1/1994,1/1/1995}}
ｔｈｅｎ（下記式のようになり、）
{10,bottom,top}
ｅｌｓｅ（そうでなければ、下記式のようになり、）
{20,bottom,top}
ｅｎｄｉｆ（下記式に示す結果となる。）
{{10,1/1/1996,1/1/1997},{20,1/1/1994,1/1/1995}}
【００４１】
＜エラー＞
すでに説明したとおり、一つの数値は、一つまたはそれ以上のエラー数値例を含んでいる場合がある。単一演算子の場合には、演算数が一つのエラー数値例を含んでいる場合には、演算子は、関連の期間に対してエラーを送り返す。
【００４２】
例えば、下記式の場合には、
not{{true,2/1/1992,top},{error,1/1/1986,1/1/1992}}
下記式に示す結果となる。
{{false,2/1/1992,top},{error,1/1/1986,1/1/1992}}
【００４３】
演算子、「＝＝」、「！＝」、「＜」、「＞」、「＞＝」、「＜＝」、「＋」および「−」の場合には、演算数の一つが一つのエラー数値例を含んでいる場合には、関連期間についての他の演算数の取得が放棄され、演算子はその期間に対してエラーを送り返す。
【００４４】
演算子「ａｎｄ」（論理積）、「ｏｒ」（論理和）、「＊」および「／」の場合には、演算数の一つが一つのエラー数値例を含んでいる場合には、他の演算数の取得は放棄されない。他の演算数が、結果を得るために、第一の演算数を必要としないようなものであることが分かった場合には、適当な結果が得られる。例えば、「ａｎｄ」（論理積）演算子の場合には、他の演算数が「偽」であることが分かった場合には、「偽」の結果が得られる。そうでない場合には、エラーが送り返される。
【００４５】
「ｉｆ」演算子の場合で、＜ｅｘｐｒ１＞が一つのエラーを含んでいる場合には、他の演算数の取得が放棄され、エラーが送り返される。
【００４６】
＜指定されていない数値＞
単一演算子の場合で、特定の期間に対して一つの演算数が指定されていない場合には、その期間に対しては結果も指定されない。
【００４７】
二項演算子の場合、特定の期間に対して一つのどちらかの演算数が指定されていない場合、その期間に対しては結果も指定されない。しかし、この演算数の代わりに、上記期間に関連する演算数の一つのエラーが使用される。演算子が「ａｎｄ」（論理積）、「ｏｒ」（論理和）、「＊」および「／」である場合には、指定されていない演算数は、結果を得るために必要ないと判断される。
【００４８】
「ｉｆ」演算子の場合には、特定の期間にに対して＜ｅｘｐｒ１＞が指定されていない場合、その期間に対しては結果も指定されない。
【００４９】
＜機能＞
評価機構は、また、数値例を操作するために多数の機能を実行する。例えば、「持続」機能および「合計」機能が提供される。
【００５０】
「持続」機能は、式中の各数値例の持続時間を計算する。
【００５１】
例えば、下記式の場合には、
duration({{10,1/1/1995,2/1/1995},{20,4/1/1993,4/1/1993}})
下記式に示す結果となる。
{{「２日」,1/1/1995,2/1/1995},{「１日」,4/1/1993,4/1/1993}}
【００５２】
「合計」機能は、式中の個々の数値例の合計を計算する。
【００５３】
例えば、下記式の場合、
sum(duration({{10,1/1/1995,2/1/1995},{20,4/1/1993,4/1/1993}}))
下記式の結果が得られる。
{「３日」,bottom,top}
【００５４】
＜評価機構＞
式を評価するための評価機構について、より詳細に説明する。
【００５５】
図２についてい説明すると、評価機構は、式２２を取り上げ、それをデータのフローチャート２３に変換する変換プログラム２１を含む。データ・フローチャートのルート・ノードは、評価した式を表わす。葉ノードは、その式に対する演算数の数値を、文字定数、または演算数の数値を取得するためのプロセスとして表わす。
【００５６】
図２は、下記式から作ったデータ・フローチャートの一例を示す。
if(A and B) then C else D
【００５７】
これは、ルート・ノード２４、「ｉｆ」演算子を表わすノード２５、「ａｎｄ」（論理積）演算子を表わすノード２６、各演算数Ａ−Ｄを表わすノード２７−３０からなる。式がもっと複雑な場合には、それに応じてデータ・フローチャートも、もっと複雑になることを理解することができるだろう。
【００５８】
グラフのノード間では二つのタイプのメッセージ、すなわち、制御メッセージおよびデータ・メッセージの交換が行われる。制御メッセージは、ルート・ノードから送られ、データ・メッセージはルート・ノードへ送られる。
【００５９】
以下に説明するように、制御メッセージは３種類ある。
タイプ   パラメータ                  説明
要求  ［ＴＳ、ＴＥ］  このタイプのメッセージは、受信ノードに、期間中、  
演算数の数値を返送するよう要求する。
取消  ［ＴＳ、ＴＥ］  このタイプのメッセージは、受信ノードに、演算数の
数値が指定の期間中に要求されないことを知らせる。
コピー  ｎｏｎｅ    このタイプのメッセージは、ノード（および、その任
意の子を繰り返し）をコピーする。
【００６０】
データ・メッセージは、書式Ｖ［ＴＳ、ＴＥ］を持つ。この場合、Ｖはデータ値であり、［ＴＳ、ＴＥ］は上記値が提要される期間である。上記データ値は、実際のデータ値であってもよいし、「エラー」マーカであってもよいし、または「これ以上データはない」マーカであってもよい。「指定されていない」数値は、連続データ・メッセージ期間の間のギャップにより表示される。
【００６１】
評価プロセスは、その子ノードに要求メッセージを送るルート・ノードからスタートする。要求メッセージのパラメータ［ＴＳ、ＴＥ］は、評価が行われる期間を示す。ルート・ノードが、必要な結果を含む一つまたはそれ以上のデータ・メッセージを受信した時、上記プロセスは終了する。
【００６２】
一つの演算数を表わす一つのノードが、その親ノードから要求メッセージまたは取消メッセージを受信すると、そのノードは、通常、そのメッセージをそのままの状態で、すべての子ノードに送る。しかし、ある種の演算数（本明細書に記載せず）は、その意味論に従って上記メッセージを修正することができる。
【００６３】
葉ノードが要求メッセージを受信した場合には、そのノードは問題の演算数を取得するためのプロセスを開始する。上記ノードが文字定数を表わしていない場合には、このノードは、指定の期間に対する演算数の数値を入手するために、データベースへアクセスすることができる。別の方法としては、上記ノードは、ユーザ・インターフェースにより、指定の期間に対する演算数の数値を入力するようにプロンプトすることができる。両方の場合、演算数の発見プロセスは、期間の順序で現在返送中の数値例を増分として増大することができる。例えば、ある人の住所が、（１９９０年１月１日、１９９８年１月１日）という期間に対して要求された場合には、現在の住所、ロンドン（１９９６年１月１日、１９９８年１月１日）を第一の数値例として返送し、その後で前の住所等を返送することができる。こうすることの利点は、最初の数値例に対して行う計算により、現在、要求されていない残りのデータも知ることができることである。最近２５年間の間、ある人が英国に住んでいたかどうかを確認する式について考えてみよう。また、データベースに現在の住所を保持しているデータベースに要求が行われているが、前の住所は、オフラインの記憶装置に記憶されている場合について考えてみよう。一つの数値例が取得された場合、葉ノードはその数値例を含むデータ・メッセージをその親ノードに返送する。
【００６４】
通常、演算子を表わすノードは、子ノードがデータ・メッセージをその親ノードに返送することができるように、自分が上記子ノードから十分なデータ・メッセージを受信するまで待機する。すなわち、上記ノードは、期間中増分動作を行う。十分な演算数を受信した場合、上記ノードは必要な動作を行い、その後、結果を含むデータ・メッセージをその親ノードに返送する。例えば、「＋」演算子は、自分が、両方の演算数からその期間内で幾分重畳している数値例を含むデータ・メッセージを受信するまで待機する。しかし、すでに説明したとおり、ある種の場合、ノードは、特定の期間［ＴＳ、ＴＥ］に対して、特定の演算数が必要ないことを決定することができる。この場合、そのノードは、適当な子ノードに、この期間をパラメータとして含む取消メッセージを送る。
【００６５】
あるノードが要求された期間に対するすべての活動を終了した場合には、そのノードは、「これ以上データはない」マーカを含むデータ・メッセージをその親ノードに返送する。
【００６６】
葉ノードが取消メッセージを受信した場合には、そのノードは指定の期間に対する演算数を取得するために、すでに行っていたすべてのプロセスを放棄する。この放棄は、データベース・アクセス要求のすべて、またはその一部の放棄を含むことができる。別の方法としては、上記放棄は、ユーザに指定のデータ値はもはや必要ないこと、またはもっと短い期間に対するデータ値が、現在必要であることを知らせるメッセージをユーザに表示することができる。
【００６７】
＜「ａｎｄ」（論理積）ノード＞
「ａｎｄ」（論理積）ノード２６の一例について、以下により詳細に説明する。ノード２６は、その親ノード２５から要求メッセージを受信し、その子ノード２７、２８からデータ・メッセージを受信する。ノード２６は、単に、要求メッセージをそのまま、その子ノード両方に送る。取消メッセージは類似の方法で処理される。
【００６８】
データ・メッセージは、「ａｎｄ」（論理積）ノードで、一つのプロセスにより処理される。上記プロセスについては図３を参照しながら以下に説明する。
【００６９】
（ステップ３１）上記プロセスは、最初下記のようにデータ構造体を生成する。
ｖａ、ｖｂ  二つの演算数ＡおよびＢの数値例を保持するベクトル。最初、こ
れらのベクトルは空である。
Ｑ          子ノードから受信したデータ・メッセージを保持するための入力
待ち行列。
Ｒ          親ノードに返送するデータ・メッセージを保持するための結果待
ち行列。
終了        処理が終了したかどうかを示すブール変数。この変数の初期値は
「偽」である。
Ｌａ、Ｌｂ  ノードＡおよびＢから受信した（またはギャップを埋めるために
計算した）最後のデータ・メッセージを保持するための変数。こ
れら各変数の初期値は「ヌル」である。
【００７０】
（ステップ３２）上記プロセスは、その後、ループに入る（ステップ３２−３９
）。このループ内での最初の動作は、結果待ち行列Ｒが空であるかどうかをチェックすることである。
【００７１】
（ステップ３３）結果待ち行列Ｒが空でない場合には、上記プロセスは、この待ち行列からヘッド項目を除去し、それをデータ・メッセージに入れて親ノードに送り、ステップ３２に戻る。
【００７２】
（ステップ３４）上記プロセスは、その後、本当に終了したかどうかをチェックする。
【００７３】
（ステップ３５）本当に終了した場合には、上記プロセスは、「これ以上データはない」マーカを含むデータ・メッセージを親ノードに送る。
【００７４】
（ステップ３６）一方、本当に終了していない場合には、上記プロセスは以下のプロセスを続行する。最初に、入力待ち行列Ｑ内の次のデータ・メッセージを現在のメッセージＭにコピーする。
【００７５】
（ステップ３７）上記プロセスは、その後、このメッセージが、子ノードＡまたはＢからのものかどうかをチェックし、その結果によりステップ３８または３９へ行く。その後、プロセスは、ステップ３２に戻り、ループ内で処理を行う。
【００７６】
図４は、上記ステップ３８を詳細に示す。ステップ３９は、演算数ＡおよびＢ、変数Ｌａ、Ｌｂ、およびベクトルＶａ、Ｖｂが、ステップ３８の鏡像になっている点を除けば、ステップ３８に類似している。
【００７７】
（ステップ４１）上記プロセスは、ノードＡから受信したメッセージの期間の間のギャップを探す。上記ギャップを発見した場合には、現在メッセージＭを、上記ギャップのスタート時間および終了時間と同じスタート時間および終了時間を持つ「指定されていない」メッセージで置き換える。図５は、ステップ４１をより詳細に示す。以下の説明においては、ＭＳおよびＭＥは、現在のメッセージＭのスタート時間および終了時間を示し、一方、ＬＳおよびＬＥは、ノードＡから受信した前のメッセージＬａのスタート時間および終了時間を示す。（この実施形態の場合、最も新しい数値例からスタートして、逆の順序でデータが処理されること、それ故、「前の」メッセージＬａは、実際には、後の期間と関連することを思いだされたい。）
【００７８】
図５を見れば以下の説明を理解することができるだろう。
【００７９】
・Ｍが「これ以上データはない」メッセージである場合には、Ｌａはヌルであり、演算数Ａは常に「指定されない」。それ故、メッセージＭは、「指定されていない」［一番下、一番上］に設定される。
【００８０】
・Ｍが「これ以上データはない」メッセージである場合には、Ｌａはヌルではなく、ＬＳは、最小時間値「一番下」より長く、演算数ＡはＬＳまでのすべての時間に対して指定されない。この場合、メッセージＭは、「指定されていない」［一番下、ＬＳ−１］に設定される。
【００８１】
・Ｍが「これ以上データはない」メッセージでない場合には、Ｌａはヌルであり、ＭＳは、最大時間値「一番上」より短く、演算数ＡはＭＥを超えるすべての時間に対して指定されない。この場合、メッセージＭは、「指定されていない」［ＭＥ＋１、一番上」に設定される。
【００８２】
・Ｍが「これ以上データはない」メッセージでなく、Ｌａはヌルではなく、ＬＳ−ＭＥ＞１の場合には、メッセージＭとＬａとの間にはギャップがあり、そのギャップの時間中、演算数Ａは指定されない。この場合、メッセージＭは、「指定されていない」［ＭＥ＋１、ＬＳ−１」に設定される。
【００８３】
・そうでない場合には、メッセージ間にはギャップは存在せず、メッセージＭが入力待ち行列Ｑから削除される。しかし、ギャップが存在する場合には、データ・メッセージＭがＱ内に残り、その結果、ループ内で次に処理することができることに留意されたい。
【００８４】
（ステップ４２）図４についてい再び説明すると、メッセージＭが「これ以上データはない」メッセージである場合には、「これ以上データはない」メッセージが、Ｂからすでに受信済みかどうかにより終了が設定される。このことは、すべての必要な演算数をＡおよびＢの両方から、すでに受信済みかどうかを示す。プロセスは、その後、ステップ３２へ戻る。
【００８５】
（ステップ４３）上記プロセスは、その後、変数ＬａをメッセージＭで置換え、メッセージＭをベクトルＶａに追加する。
【００８６】
（ステップ４４）上記プロセスは、その後、メッセージＭの数値ＭＶが「偽」で あるかどうかをチェックする。偽である場合には、上記プロセスは、パラメータ［ＭＳ、ＭＥ］を含む取消メッセージをノードＢに送る。すなわち、特定の期間に対する演算数Ａの戻り数値が「偽」である場合には、上記期間に対する演算数Ｂの取得は取消される。
【００８７】
（ステップ４５）上記プロセスは、次に、現在のメッセージＭの期間［ＭＳ、ＭＥ］に重畳している、ノードＢから受信したベクトルＶｂのサブセットＳを発見する。このサブセットＳは、一組のゼロまたはそれより大きい数値例Ｅからなる。
【００８８】
（ステップ４６）上記プロセスは、その後、ループを実行し、このループ内でサブセットＳの各数値例Ｅに対して下記の処理を行う。
【００８９】
（以下の説明においては、ＥＶおよび（ＥＳ、ＥＥ）は、数値例Ｅの数値および 期間を表わし、ＭＶは、現在のメッセージＭの数値を表わす。）
【００９０】
・ＥＶまたはＭＶが偽である場合には、データ・メッセージ「偽」（ＥＳ  ＥＥ）が、結果待ち行列Ｒ内に挿入される。
【００９１】
・そうでない場合で、ＥＶまたはＭＶがエラー値である場合には、結果待ち行列Ｒ内にデータ・メッセージ「エラー」［ＥＳ、ＥＥ］が挿入される。
【００９２】
・そうでない場合で、ＥＶまたはＭＶが定義されていない値である場合には、処理は必要ない。そのため、結果待ち行列内に、数値が定義されない期間に対応するギャップが残る。
【００９３】
・そうでない場合で、ＥＶまたはＭＶがブール値でない場合には、タイプ違反が発生している。この場合、結果待ち行列Ｒ内にデータ・メッセージ「エラー」［ＥＳ、ＥＥ］が挿入される。
【００９４】
・そうでない場合には、結果待ち行列Ｒ内にデータ・メッセージ「真」［ＥＳ、ＥＥ］が挿入される。
【００９５】
すでに説明したとおり、上記動作はノードＢから受信したメッセージの場合に類似している。
【００９６】
要するに、「ａｎｄ」（論理積）ノードが、その期間が重畳しいている各演算数の数値例を発見するために、各演算数をチェックし、その後、各重畳期間に対するデータ・メッセージ発生することを理解することができるだろう。演算数のどれかの戻り数値が、特定の期間に対して「偽」である場合には、上記期間に対する他の演算数の取得は取消される。
【００９７】
＜可能ないくつかの修正＞
本発明の範囲から逸脱することなしに、上記システムに多くの修正を行うことができることを理解することができるだろう。例えば、式はある時間に修正されたデータであってもよい。
【図面の簡単な説明】
【００９８】
【図１】式評価機構を含むデータ処理装置のブロック図である。
【図２】上記データ処理装置のより詳細な図面である。
【図３】「ａｎｄ」（論理積）演算子の実行のフローチャートである。
【図４】「ａｎｄ」（論理積）演算子の実行のフローチャートである。
【図５】「ａｎｄ」（論理積）演算子の実行のフローチャートである。
【図１】
2007018521.tif 000003
【図２】
2007018521.tif 000004
【図３】
2007018521.tif 000005
【図４】
2007018521.tif 000006
【図５】
2007018521.tif 000007