機械翻訳について

CDL Iterator文とFOR ALL...INおよびWHEREキーワード

FOR ALL、INおよびWHEREキーワードは、イテレータ文をサポートしています。

FOR ALLおよびINキーワード

FOR ALLおよびINキーワードは、イテレータ文の2つの句を開始します。 INキーワードは、反復のソースを指定します。

ノート: IN句には、リテラル・コレクションまたはモデル・ノードの集合(OptionsOfなど)のみを含めることができます。 インスタンスが指定されていないため、特定のモデルのすべてのインスタンスで同じ反復が使用されます。

WHEREキーワード

WHEREキーワードは、WHERE基準に一致しない反復を排除するフィルタとして機能するイテレータ文の句を開始

FOR ALL IN and WHERE Clause using Node Attributesの例では、WHERE句で指定された基準に子が存在するため、結果はオプションdへの貢献度のみになります。

ノート: WHERE句の条件式はstaticである必要があります。 WHERE句およびIN句でCOLLECT操作を使用する場合、オペランドはstaticである必要があります。

ノート: コンフィギュレータは、上位から下位の互換性ルールを評価し、AND演算子またはOR演算子の使用に基づいて式に優先度または優先度を与えません。 つまり、最初に入力したリレーションが評価され、次に2番目のリレーションが評価されます。

次の例では、結果はオプションdへの3つの貢献になります。

ADD &var TO d
FOR ALL &var IN {a, b, c};

次の例では、ユーザー定義属性UDA3が5未満であるオプション・クラスaの子が存在するため、数値機能dへの貢献度が最大になります。 この例は、中カッコで囲まれたコレクションも示しています(コレクション・リテラルを参照)。

例: ノード属性を使用するFOR ALL INおよびWHERE句

ADD &var.userAttrs["AG_name.NumAttr"]+ 10 TO d
FOR ALL &var IN {OptionsOf(a)}
WHERE &var.userAttrs["AG_name.UDA3"] < 5;

両方の例で、1つの文が1つ以上の制約またはコントリビューションに展開され、各文が明示的に繰り返されることはありません。 両方の例で、イテレータ変数は、累計ステートメントの左側にも関連付けることができます。