数式

イントロダクション

数式ブロックは、基本的な算術および論理型に対する操作を簡潔なテキスト形式で記述できるようにします。その主な利点は、計算が多くの独立したフィルターを必要とするプログラムを簡素化できることです。

数式の表記法は、数学的な代数の基本的な規則に基づいており、演算子、引数、および関数のシーケンスで構成されています。その目的は、Aurora Vision Studio内での数式は、スプレッドシートプログラムの数式や一般的なスクリプト言語の式と同様です。

数式ブロックには、ユーザーによって定義された任意の数の入力および出力が持てます。これらのポートは、1つのブロック内でさまざまな型を持つことができます。入力値は算術式の引数として使用されます(入力名によって識別されます)。各ブロックの出力にはそれぞれ別々の数式が割り当てられており、その数式の役割は指定された出力が保持する値を計算することです。一度計算されたら、出力の値は、ブロックの説明で下位に位置する他の出力の数式で何度も使用できます。

数式で使用される各引数には厳密に定義されたデータ型があり、これは数式の初期化中に既知で確認されます(これを静的型付けと呼びます)。 入力引数の型は、明示的に定義されたブロックポートの型から派生します。これらの型は、引数で実行される演算によって伝播されます。最終的に、数式の値は、数式の出力に割り当てられた明示的に定義された型に変換されます。これらの型の互換性は、プログラムの初期化中(数式ブロックの最初の実行の前に)に検証され、すべての非互換性はエラーとして報告されます。

数式の例:

outValue = inValue + 10
outValue = inValue1 * 0.3 + inValue2 * 0.7
outValue = (inValue - 1) / 3
outValue = max(inValue1, inValue2) / min(inValue1, inValue2)
outRangePos = (inValue >= -5 and inValue <= 10) ? (inValue - -5) / 15 : Nil
outArea = inBox.Width * inBox.Height

データ型

算術論理数式ブロックは、入力から出力へ任意の型を渡すことができます。以下で述べるデータ型は、数式で利用可能な演算子および関数によって認識され、その値の処理に参加できます。

データ型 説明
Integer

-2,147,483,648 ~ 2,147,483,647の範囲の整数値の算術型で、算術および比較演算子とともに使用できます。

Integer?
Integer*

条件付きまたはオプションの整数値の算術型で、Nil(空の値)の値も取ることができます。

整数の型が受け入れられる場所ではどこでも使用できます。演算子または関数が異なる動作を想定していない場合、 これにより操作の結果も条件付きの値になります。つまり、Nil値が発生すると操作の実行が中止され、Nil値が操作の結果として返されます。

Real

実数(浮動小数点数)、算術および比較演算子とともに使用できます。

Real?
Real*

条件付きまたはオプションの実数値で、Nil(空の値)の値も取ることができます。

整数? と同様に、実数の型が受け入れられる場所ではどこでも使用でき、演算子の条件付き実行を引き起こします。

Long

-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807の範囲の整数値の算術型で、算術および比較演算子とともに使用できます。

Long?
Long*

条件付きまたはオプションの Long 型と同等で、Nil(空の値)の値も取ることができます。

整数? と同様に、ロングの型が受け入れられる場所ではどこでも使用でき、演算子の条件付き実行を引き起こします。

Double

倍精度浮動小数点数で、算術および比較演算子とともに使用できます。

Double?
Double*

条件付きまたはオプションのダブル型と同等で、Nil(空の値)の値も取ることができます。

整数? と同様に、ダブルの型が受け入れられる場所ではどこでも使用でき、演算子の条件付き実行を引き起こします。

Bool

論理型で、trueまたはfalseのいずれかの値を取ります。論理および比較演算子として使用するか、条件引数として使用できます。比較演算子の結果でもあります。

Bool?
Bool*

条件付きまたはオプションの論理型で、Nil(空の値)の値も取ることができます。

Boolの型が受け入れられる場所ではどこでも使用できます。演算子または関数が異なる動作を想定していない場合、 これにより操作の結果も条件付きの値になります。つまり、Nil値が発生すると操作の実行が中止され、Nil値が操作の結果として返されます。

String

動的な長さの文字列を受け入れるテキスト型です。

文字列の長さ(文字数)は、String型の組み込みの .Length プロパティを使用して決定できます。

String?
String*

条件付きまたはオプションのテキスト型で、Nil(空の値)も取ることができます。

String型が受け入れられる場所ではどこでも使用できます。これにより(演算子または関数が異なる動作を想定していない限り)その上で実行された操作の結果も条件付き値となります。つまり、Nil値が発生すると操作の実行が中断され、結果としてNil値が返されます。

enum

タイプシステムで宣言された列挙型のいずれか。列挙型は、与えられたタイプの値に割り当てることができるアイテムの制限されたグループを定義します。これらのアイテム(定数)の各々は、指定された列挙型内で一意の名前で識別されます(例:列挙型SortingOrderにはAscendingDescendingという2つの可能な値があります)。

数式の一部として列挙型の値を作成し、同じ列挙型の2つの値を比較することができます。

enum?
enum*

定数の代わりに、Nil(空の値)の値を追加で受け入れることができる、条件付きまたはオプショナルな列挙型です。

structure

任意の構造体 - さまざまな型の複数の値が1つのオブジェクトに組み合わさったものです。式内では、構造体の要素を別々に読み取り、その型内でさらなる操作を行うことができます。

structure?
structure*

任意の条件付きまたはオプションの構造体 - フィールド構成の代わりに、Nil(空の値)を追加で取ることができます。

通常の構造体の場合と同じ基準で、条件付き構造体のフィールドにアクセスすることができます。ただし、読み取るフィールドも条件付き型です。Nilの値を持つ条件付き構造体のフィールドを読み取ると、結果としてNilの値が返されます。

<T>Array

任意の値の配列。式内では、配列のサイズを決定し、配列の要素を読み取り、それらの要素に対してさらなる操作を行うことができます。

配列のサイズは、配列型に組み込まれた .Count プロパティで決定できます。

<T>Array?
<T>Array*

任意の値の条件付きまたはオプションの配列。要素のシーケンスの代わりに、Nil(空の値)を追加で取ることができます。

通常の配列と同様に、条件付き配列のサイズおよび要素を読み取ることができます。ただし、この場合、読み取る値も条件付きの型です。条件付き配列からNil値の要素を読み取ると、結果としてNil値が返されます。

リテラル定数

指定された形式でリテラル定数を書き込むことで、数式に定数値を配置できます。

データ型
10進数表記の整数値 Integer 0
150
-10000
Long 0L
150L
-10000L
16進数表記の整数値 Integer 0xa1c
0x100
0xFFFF
Long 0xa1cL
0x100L
0xFFFFL
10進数表記の実数値 Real 0.0
0.5
100.125
-2.75
Double 0.0d
0.5d
100.125d
-2.75d
科学的表記法の実数値 Real 1e10
1.5e-3
-5e7
Double 1e10d
1.5e-3d
-5e7d
Text String "Hello world!"
"First line\nSecond line"
"Text with \"quote\" inside."

テキスト定数

テキスト定数は、文字列型のデータを数式に挿入する方法です。たとえば、入力データとの比較や、数式ブロックの出力に正しいテキストを条件付けて生成するために使用できます。テキスト定数は、テキストを引用符で囲むことでフォーマットされます。例: "This is text";引用符を除いた内部のテキストが定数の値になります。

定数に数式で使用できない文字や(例:引用符)数式のアクティブな部分である文字を含めたい場合は、エスケープシーケンスを使用して所望の文字を入力する必要があります。これはバックスラッシュ文字(\)と適切な文字コードから構成されます(この場合、バックスラッシュ文字を通常の文字として入力するにはエスケープシーケンスも必要です)。以下の事前定義された特殊文字を使用できます:

  • \n - 改行、ASCII: 10
  • \r - キャリッジリターン、ASCII: 13
  • \t - 水平タブ、ASCII: 9
  • \' - アポストロフィ、ASCII: 39
  • \" - 引用符、ASCII: 34
  • \\ - バックスラッシュ、ASCII: 34
  • \v - 垂直タブ、ASCII: 11
  • \a - "ベル"、ASCII: 7
  • \b - "バックスペース"、ASCII: 8
  • \f - "改ページ"、ASCII: 12

例:

"This text \"is quoted\""
"This text\nis in new line"
"In Microsoft Windows this text:\r\nis in new line."
"c:\\Users\\John\\"

他の文字は、ASCIIコードを16進数形式で入力する\x??シーケンスを使用して取得できます。たとえば、"send \x06 ok"は、ASCIIコードが6の文字を含むテキストをフォーマットし、"\xce"はASCIIコード(16進数: ce)が206の文字をフォーマットします。

事前定義定数値

数式の一部として、以下に挙げる事前定義された定数値のいずれかにアクセスすることができます。 定数値を操作の引数として使用するには、この定数値の名前を入力する必要があります。

Name データ型 説明
true Bool

肯定的な論理値。

false Bool

否定的な論理値。

Nil Null

条件付きおよびオプションの型の特別な値で、空の値(値なし)を表します。

この定数は独自のデータ型を持たない("Null"という特別な型で表される)。
実行される操作の一部として、その型は自動的に条件付き型に変換されます。

pi Real

実数値で、数学的な定数 π の近似値です。

e Real

実数値で、数学的な定数 e の近似値です。

inf Real

正の無限大を表します。これは、実数型で表される可能性のある他のすべての値よりも大きな特別な値です。なお、負の無限大は "-inf" 表記で得られます。

列挙型定数

型システムで定義された列挙型定数があります。これらは独自の型を持ち、その型の中で特定の定数はいくつかの可能性から1つを選択します。 例えば、配列ソートのためのフィルタは、ソートの順序を定義するパラメータを取ります。このパラメータは "SortingOrder" 列挙型です。 この型の一部として、"Ascending" および "Descending" 定数によって識別される2つの可能性のうちの1つを選択できます。

式の一部として、次の構文を使用して任意の列挙型定数を式に入力できます:

<enum name>.<item name>

式で使用される定数の完全な名前は、列挙型の名前、ドット、およびその型で使用可能ないくつかのオプションの1つの名前で構成されます。例:

SortingOrder.Descending
BayerType.BG
GradientOperator.Gauss

算術変換

バイナリ算術演算子は、1つの共通の型の一部として実行されます。両方の引数の型が同一でない場合、それらを1つの共通の型に変換し、その型で演算が実行されます。このような変換は算術変換と呼ばれ、変換が可能な場合、引数の型は互換性があると呼ばれます。

算術変換は次の原則の一環として実行されます:

条件 実行される変換
2つの異なる数値型。 範囲または精度が小さい型の引数は、2番目の引数の型(範囲または精度が大きい型)に変換されます。可能な引数の型変換には、整数から実数、整数からロング、整数からダブル、実数からダブルが含まれます。同じ原則は、上記の型の条件付き対応物についても使用されます。
型のうちの1つが条件付き。 2番目の型は条件付き型に変換されます。
2つの異なる条件付き型。 条件付き型の基になる型の一環として算術変換が実行されます。結果として、型は条件付きのままです。
引数のうちの1つがNil。 2番目の引数が条件付き型に変換されます(まだ条件付きでない場合)、Nilの値は2番目の引数の条件付き型に変換されます。

自動暗黙変換

ある操作が特定の型の引数を必要とし、その代わりに異なる型の引数が使用される場合、以下に述べる原則を使用してその引数型を暗黙的に変換しようとします。

変換 説明
Integer → Real
Integer → Double

整数から浮動小数点値への変換。この変換では精度の損失が発生する可能性があります。その結果として、正確な数値表現の代わりに、近似された浮動小数点値が返されます。

この変換は、同様の条件型の場合も可能です。

Integer → Long
Real → Double

範囲や精度がより大きい等価な型への変換。この変換によってデータは失われません。

この変換は、同様の条件型の場合も可能です。

T → T?

条件性の付与。任意の非条件型は、その条件型に変換できます。

Nil → T?

Nil値への型の付与。Nil値は任意の条件型に変換できます。その結果、指定された型の空の値が得られます。

T* → T?

式の一部として、オプション型と条件型は同じように処理されます(式では自動値に対する定義済みの反応がありません。データだけが渡されます)。 もしも特定の操作が条件型の引数を必要とする場合、同じ原則に基づいてオプション型の引数も取ることができます。

演算子

式の一部ですが、以下の演算子を使用できます。

否定演算子-
恒等演算子+
2の補数演算子~
論理否定演算子not
乗算演算子* / div mod
加算演算子+ -
ビット右シフト演算子>> <<
ビット演算子:& | ^
論理演算子:and or xor
比較演算子:< <= > >=
等号テスト:== <>
条件演算子:if-then-else  ?:
デフォルト値との結合:??
関数呼び出し:function()
フィールド読み取り:.
要素読み取り:[i]
明示的な配列処理:[]
配列作成演算子:{}
出力の前の値:prev()
グローバルパラメータ読み取り:::

単項演算子

否定演算子 (-)
expression

データ型: Integer, Real, Long, Double, Vector2D, Vector3D, Matrix

数値の符号を否定した値、同じ長さの逆向きのベクトル、またはすべての要素が否定された行列を返します。

恒等演算子 (+)
expression

データ型: Integer, Real, Long, Double, Vector2D, Vector3D, Matrix

変更のない値を返します。

2の補数演算子 (~)
expression

データ型: Integer, Long

ビットを否定(バイナリ補数)した整数値を返します。

論理否定演算子 (not)
not expression

データ型: Bool

反対の状態の論理値を返します。

乗算演算子 (*)
expression * expression

データ型:

Integer * Integer → Integer
Long * Long → Long
Real * Real → Real
Double * Double → Double
Vector2D * Vector2D → Vector2D
Vector2D * Real → Vector2D
Real * Vector2D → Vector2D
Vector3D * Vector3D → Vector3D
Vector3D * Real → Vector3D
Real * Vector3D → Vector3D
Matrix * Matrix → Matrix
Matrix * Real → Matrix
Real * Matrix → Matrix
Matrix * Vector2D → Vector2D
Matrix * Point2D → Point2D
Matrix * Vector3D → Vector3D
Matrix * Point3D → Point3D

2つの数値引数の積を返し、2つのベクトルの要素ごとの積、係数でスケーリングされたベクトル、2つの行列の積、行列の要素をスカラー倍、または行列とベクトルまたは点の座標を乗算します。

2Dベクトル(または2D点座標)と行列を乗算する場合、一般的な変換2x2または3x3の行列が想定されます。乗算は、ソースベクトルが2x1行列であり、結果の1x2行列が新しいベクトルまたは点の座標を形成すると仮定して行われます:

\[ \begin{bmatrix} i_{1,1} & i_{1,2} \\ i_{2,1} & i_{2,2} \end{bmatrix} \times \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} x' & y' \end{bmatrix} \]

When 3x3 matrix is used the multiplication is performed by assuming that the source vector is a 3x1 matrix (expanded with 1 to three elements) and by normalizing the resulting 1x3 matrix back to two element vector or point coordinates:

\[ \begin{bmatrix} i_{1,1} & i_{1,2} & i_{1,3} \\ i_{2,1} & i_{2,2} & i_{2,3} \\ i_{3,1} & i_{3,2} & i_{3,3} \end{bmatrix} \times \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \begin{bmatrix} x' & y' & w' \end{bmatrix} \rightarrow \begin{bmatrix} \frac{x'}{w'} & \frac{y'}{w'} \end{bmatrix} \]

同様に、行列と3Dベクトル(または3D点座標)を乗算する場合、一般的な変換3x3または4x4の行列が想定されます。

実数除算演算子 (/)
expression / expression

データ型: 実数 (Real), 倍精度実数 (Double), 2次元ベクトル (Vector2D), 3次元ベクトル (Vector3D)

2つの実数の商、2つのベクトルの要素ごとの商、またはベクトルの長さをスカラーで割ったものを返します。

整数除算演算子 (div)
expression div expression

データ型: 整数 (Integer), 長整数 (Long)

2つの整数の商を割り算の余りなしで返します。第二引数がゼロの場合、プログラムの実行時にドメインエラーが発生します。

剰余演算子 (mod)
expression mod expression

データ型: 整数 (Integer), 長整数 (Long)

2つの整数を割った余りを返します。第二引数がゼロの場合、プログラムの実行時にドメインエラーが発生します。

加算演算子 (+)
expression + expression

Data types:

Integer + Integer → Integer
Long + Long → Long
Real + Real → Real
Double + Double → Double
Vector2D + Vector2D → Vector2D
Point2D + Vector2D → Point2D
Vector3D + Vector3D → Vector3D
Point3D + Vector3D → Point3D
Matrix + Matrix → Matrix
String + String → String

2つの数値の和、2つのベクトルの和、点をベクトル分移動させるか、2つの行列の要素ごとの和を返します。

String タイプと組み合わせて使用する場合、テキストの連結を行い、結合された文字列を返します。

減算演算子 (-)
expression - expression

Data types:

Integer - Integer → Integer
Long - Long → Long
Real - Real → Real
Double - Double → Double
Vector2D - Vector2D → Vector2D
Point2D - Vector2D → Point2D
Vector3D - Vector3D → Vector3D
Point3D - Vector3D → Point3D
Matrix - Matrix → Matrix

2つの数値の差、2つのベクトルの減算、点をベクトルの逆方向に移動させるか、2つの行列の要素ごとの減算を返します。

ビット右シフト演算子 (>>)
expression >> expression

データ型: Integer, Long

第一引数の値を返し、そのバイナリ表現のビットが、第二引数で定義された位置数だけ右にシフトされます(より意味のないビットの方向に)。 シフト後、右側で型の範囲を超えるビットは無視されます。左側の不足しているビットはゼロで埋められます。

第二引数が負の場合、プログラム実行時にドメインエラーが発生します。Integer型の場合、またはLong型の場合、シフト値が31を超える場合、0の値が返されます。

ビット左シフト演算子 (<<)
expression << expression

データ型: Integer, Long

第一引数の値を返し、そのバイナリ表現のビットが、第二引数で定義された位置数だけ左にシフトされます(より意味のあるビットの方向に)。 シフト後、左側で型の範囲を超えるビットは無視されます。右側の不足しているビットはゼロで埋められます。

第二引数が負の場合、プログラム実行時にドメインエラーが発生します。Integer型の場合、またはLong型の場合、シフト値が31を超える場合、0の値が返されます。

ビット論理積演算子 (&)
expression & expression

データ型: Integer, Long

2つの整数のビットごとの積の値を返します。この演算子は、各対応するビットのペアを個別に比較します。 両方のビットの値が1の場合、結果のビットも1になります。少なくとも1つのビットの値が0の場合、結果のビットは0になります。

ビットごとのOR演算子 (|)
expression | expression

データ型: Integer, Long

2つの整数のビットごとの和の値を返します。この演算子は、2つの引数の対応する各ビットを個別に比較します。少なくとも1つのビットの値が1の場合、結果のビットも1になります。両方のビットが0の場合、結果のビットも0になります。

ビットごとの排他的OR演算子 (^)
expression ^ expression

データ型: Integer, Long

2つの整数のビットごとの排他的な和の値を返します。この演算子は、2つの引数の対応する各ビットを個別に比較します。2つのビットが等しい場合、結果のビットは0になります。2つのビットが異なる場合、結果は1になります。

論理AND演算子 (and)
expression and expression

データ型: Bool

この演算子は、2つの論理引数を結合します。両方の引数がtrueの場合、結果もtrueになります。少なくとも1つの引数がfalseの場合、結果はfalseになります。

論理OR演算子 (or)
expression or expression

データ型: Bool

この演算子は、2つの論理引数を結合します。少なくとも1つの引数がtrueの場合、結果はtrueになります。両方の引数がfalseの場合、結果もfalseになります。

論理排他的OR演算子 (xor)
expression xor expression

データ型: Bool

この演算子は、2つの論理引数を結合します。引数が異なる場合、結果はtrueになります。引数が等しい場合、結果はfalseになります。

小なり (<)
expression < expression

データ型: Integer, Real, Long, Double, String

結果の型: Bool

この演算子は2つの値を比較します。第一引数の値が第二引数の値よりも小さい場合、trueの値を返します。

String型と使用する場合、演算子は辞書順のテキスト比較を行います。

小なりイコール (<=)
expression <= expression

データ型: Integer, Real, Long, Double, String

結果の型: Bool

この演算子は2つの値を比較します。第一引数の値が第二引数の値以下の場合、trueの値を返します。

String型と使用する場合、演算子は辞書順のテキスト比較を行います。

大なり (>)
expression > expression

データ型: Integer, Real, Long, Double, String

結果の型: Bool

この演算子は2つの値を比較します。第一引数の値が第二引数の値よりも大きい場合、trueの値を返します。

String型と使用する場合、演算子は辞書順のテキスト比較を行います。

大なりイコール (>=)
expression >= expression

データ型: Integer, Real, Long, Double, String

結果の型: Bool

この演算子は2つの値を比較します。第一引数の値が第二引数の値以上の場合、trueの値を返します。

String型と使用する場合、演算子は辞書順のテキスト比較を行います。

等価性テスト (==)
expression == expression

データ型: 互換性のある任意の型

結果の型: Bool

この演算子は2つの引数を比較します。値が等しい場合、trueの値を返し、そうでない場合はfalseの値を返します。 互換性のあるプリミティブ型だけでなく、同じ型のオブジェクト間でも等価性を確認できます(例: 構造体)。

ただし、RealまたはDouble(またはそれらの型の構造体)の値を比較することは難しい場合があります。これは、 そのような型の値の非常に小さな(気づかない)差異が、比較の予測不能な負の結果を引き起こす可能性があるためです。

この演算子は条件付きの値を特別な方法で処理します。一方または両方の引数に条件付き型が存在する場合でも、 演算子全体が条件付きで実行されるわけではありません。条件付き型の空の値も比較に参加します。また、引数が条件付き空の値を 持っているかどうかは、それをNil定数と比較することで確認できます。

この演算子は決して条件付き型を返しません。

非等価性テスト (<>)
expression <> expression

データ型: 互換性のある任意の型

結果の型: Bool

この演算子は==演算子と同様の比較を実行しますが、逆の値を返します(引数が等しくない場合、true)。

特殊演算子

条件演算子 (if-then-else, ?:)
if condition_expression then expression_1 else expression_2

if   condition_expression_1 then expression_1
elif condition_expression_2 then expression_2
 (...)
elif condition_expression_n then expression_n_minus_1
else expression_n

condition_expression ? expression_1 : expression_2

データ型:

  • condition_expression_x: Bool
  • expression_1, expression_2, ..., expression_n: 互換性のある任意の型

この演算子は条件に基づいて2つ以上の値のうちの1つを選択して返します。

if condition_expression then expression_1 else expression_2

この場合、最初のオペランドであるcondition_expressionBoolデータ型の条件値です。

if   condition_expression_1 then expression_1
elif condition_expression_2 then expression_2
 (...)
elif condition_expression_n then expression_n_minus_1
else expression_n

複数の条件を連結する場合、プログラムは連続する条件のいずれかが満たされているかどうかを確認します。最初の条件はif...then句を使用し、 それ以降の条件はすべてelif...then句を使用します。これらの複数の条件のいずれかがTrueである場合、対応する式が返されます。ただし、 if...then句とすべてのelif...then句がFalseと判断された後、else句が返す必要がある1つの式が呼び出されます。

この演算子は条件付きの値を特別な方法で処理します。条件型が最初のオペランド(条件値)でのみ発生する場合、演算子全体が条件付きで実行されるようになります。 選択する値のオペランドにおける条件型は、演算子の実行に変更を加えません。これらのオペランドの値は、常に操作結果と同じ方法で渡されます(空の値の場合も同様)。

演算子の結果の型は、選択する値の型を組み合わせて決定されます(1つの型を別の型に変換したり、2つの型を別の共通の結果型に変換したりする)。 これは算術変換の原則に従います。演算子の条件付き実行の場合、これらの型は条件型に変更される可能性があります。

Merge with default (??)
expression ?? expression

Data types: 互換性のある任意の型

この演算子では、最初の引数が条件型であることが必要です。最初の引数が非空の値を返す場合、その値が演算全体の結果となります。 最初の引数が空の値(Nil)を返す場合、演算全体の結果は第二の引数の値となります。

演算の結果の型は、2つの引数の型を組み合わせたものですが、条件付けが変更されています。第二の引数が非条件型の場合、 演算の結果も非条件型になります。第二の引数が条件型の場合、演算の結果は条件型になります。

この演算子は、最初の引数の空の条件に基づいて代替値を選択するために使用できます。

演算子はデフォルト値とのマージと呼ばれています。これは、引数から条件付けを削除し、その空の値をデフォルト値で置き換えることができるからです。 これを行うためには、第二の引数は条件型であってはなりません。

この演算子は条件型を処理するため、演算子自体は決して条件付きで実行されません。

Function call (function())
function(arg_1, arg_2, ..., arg_n)
function<type_name>(arg_1, arg_2, ..., arg_n)

関数の呼び出しは、関数名とそれに続く引数のリストをかっこで囲んで行います。必要なデータ型は呼び出される関数に依存します。 ジェネリック型を持つ関数の場合、関数名の直後に角かっこでジェネリック型を明示的に指定することもできます。

参照: Functions

フィールド読み取り(.
expression.name

この演算子は、単一の構造体フィールドまたはオブジェクトでサポートされているプロパティを読み取るために使用されます。 演算の結果の型は、読み取られるフィールドの型と互換性があります。

任意の構造体(任意の型のフィールドが読み取られるもの)を引数として渡すことができます。

nameは、読み取るべきフィールド(またはプロパティ)の名前を決定します。

オブジェクト関数呼び出し(.function()
expression.function(arg_1, arg_2, ..., arg_n)

この構造は、オブジェクト(expressionオブジェクトのデータ型で定義される)によって提供される関数を呼び出すために意図されています。

この関数へのアクセスは、(フィールド読み取り演算子と同様に)引数の後にドットサインと関数名を入力することで提供されます。関数名の後には、 かっこで囲まれた関数の引数のリストを入力する必要があります。必要なデータ型は、呼び出される関数に依存します。

要素読み取り([i][i, j]
expression[indexer]
expression[indexer1, indexer2]

データ型:

<T>Array[i] → <T>
Path[i] → Point2D
Matrix[行, 列] → Real

この演算子は、配列から単一の要素、Pathオブジェクトから単一のポイント、またはMatrixオブジェクトから単一の要素を読み取るために使用されます。演算子の結果の型は、配列の要素の型と同じです。 インデクサはInteger型の引数である必要があり、その値は読み取る要素を指します(値が0の場合は最初の配列要素を示します)。 インデクサが0からArrayLength-1の範囲外を指す場合、演算子はプログラムの実行時にドメインエラーを引き起こします。

明示的な配列処理([]
expression[]

外部の操作(この演算子の結果を引数として使用する操作)は、配列処理モードで実行され、この引数を配列データソースとして使用することを示唆します。

この演算子は配列データ型に適用する必要があり、同じ型の変更されていない配列を返します。この演算はランタイムに影響を与えず、配列処理モードの曖昧さを解決するためにのみ使用されます。

配列の作成({}
{item_1, item_2, ..., item_n}

指定された要素から配列を作成します。

提供される要素は、算術変換の規則を使用して同じデータ型であるか変換可能である必要があります。戻り値の型はTArrayであり、Tは指定された要素の共通の型です。

演算子は少なくとも1つのアイテムを提供する必要があります。提供されるアイテムの少なくとも1つは、定数Nilと異なる(非null型)である必要があります。

以下も参照してください。 createArray関数

前回の出力値 (prev())
prev(outputName, defaultValue)
prev(outputName)

この演算子は、タスクループ内で式ブロックがインスタンス化される場所で、前のイテレーションでの式ブロックの出力値を読み取るために使用されます。この演算子は 最初の引数として識別子を取ります - 式ブロックの出力名です。親式ブロックの任意の出力が使用できますが、現在の式の出力や現在の式よりも下に定義された式の出力も含まれます。

演算子の第二引数はデフォルト値を定義し、任意の式を受け入れることができます。

この演算子の目的は、集計またはシーケンス生成の式を作成することです。タスクの最初のイテレーションでは、この演算子はデフォルト値(第二引数で定義)を返します。 各後続のタスクイテレーションでは、演算子は参照された式の前回に計算された値(第一引数で定義)を返します。

演算子の結果の型は、参照された出力とデフォルト値の引数の型を算術変換の原則に従って結合して決定されます。

演算子の第二引数は省略することができます。その場合、デフォルト値としてNilが使用され、結果の型はアクセスした出力型の条件付き相当です。 merge with default (??) 演算子を使用してNil値を処理できます。

グローバルパラメータの読み取り (::)
::globalParameterName

プログラムのグローバルパラメータの値を読み取ります(パラメータの名前で参照)。

グローバルパラメータは、現在のプログラムモジュールからアクセス可能である必要があります。

演算子の優先順位

同じ引数の周りで複数の演算子を使用する場合、これらの演算子の実行優先順位はその優先度に依存します。 最初に、最も高い優先順位を持つ演算子が実行されます。優先度が等しいバイナリ演算子の場合、演算子は左から右に順番に実行されます。例:

A + B * C / D

最初に、引数 B と C が乗算されます(乗算は加算よりも優先順位が高く、この場合は優先順位が同じ除算演算子の左に配置されています)。 乗算の結果が D で除算され(左から右に進みます)、その商が A に加算されます。

常に接頭辞の形である単項演算子は、引数から最も近い演算子から最も遠い演算子まで、右から左に実行されます。

三項条件演算子は右から左の順に実行されます。これにより、他の条件演算子の引数として条件をネストすることができます。

演算子の実行順序は、式のネストされた部分をかっこに入れることで変更できます。例:

(A + B) * (C / D)

この場合、加算と除算が最初に実行され、その結果が乗算されます。

演算子の優先順位

#演算子説明
1 [i]要素の読み取り
[]明示的な配列処理
()関数呼び出し
.構造体フィールドの読み取り
.name()オブジェクトの関数呼び出し
2 +恒等
-否定
~ビット否定
not論理否定
3 * / div mod乗算演算子
4 + -加算演算子
5 >> <<ビットシフト
6& ビット演算子
7^
8|
9 < <= > >=値の比較
10 ==等号テスト
<>不等号テスト
11and 論理演算子
12xor
13or
14 ??デフォルト値とのマージ
15 ?: 条件演算子
16 if-then-else

数字が小さいほど優先順位が高く、演算子の早い実行を意味します。

演算子処理モード

条件付き処理

ビジョンアプリケーションのフィルターと同様に、数式演算子や関数呼び出しを条件モードで呼び出すことができます。操作の引数に提供された値が条件型であり、操作がその場所で条件型のデータを期待していない場合、操作全体は条件モードで実行されます。 条件モードでは、操作の戻り値が条件型に昇格し、操作は必要な引数がNilでない場合にのみ実行され、少なくとも1つの条件モードの引数がNilと等しい場合は残りの引数が無視され、操作は実行されずにNilが返されます。

例えば、バイナリ演算子 +Integer? 型の引数で実行できます。この場合、それは Integer? 型の値を返します。引数の少なくとも1つがNilと等しい場合、他の引数は無視され、Nilが返されます。

条件付き処理は通常、複数の入れ子になった操作にわたって連鎖し、相互に条件付きモードで実行される数式の大きな部分をもたらします。条件付き処理が望まれない場合、または(例えば、数式から条件付きデータを返したくない場合)、デフォルト値とのマージ演算子を使用して、結果のデータ型から条件修飾子を削除し、Nilをデフォルト値で置き換えることができます。

備考

  • 等価チェック演算子(== および <>)は条件モードで実行されません。代わりにこれらの演算子は、条件型を考慮に入れて値を比較し、Nilとの等価性をテストします。条件型と非条件型が混在している場合でもこれらの演算子は値を比較します。
  • 条件演算子?:if-then-else)は、Bool? 型の値が条件(最初の)引数に使用される場合に条件モードで実行できます。True および False 値の引数(2番目および3番目の引数)は条件付き処理に参加しません。これらの値は、データ型に関係なく結果として渡されます。
  • デフォルト値とのマージ演算子??)は、明示的に条件型を処理するため、条件モードで実行されません。
  • 関数呼び出し演算では、関数の非条件型引数に条件値が割り当てられることで条件実行モードが作成されます。
  • ジェネリック関数呼び出し演算では、ジェネリック関数引数に暗黙的に条件実行を作成することはできません。これらの引数の条件型は、自動的にジェネリック型の使用にも条件型を指定して自動的に推論されるためです。これを達成するには、関数のジェネリック型を明示的に指定する必要があります。
  • 同様に、配列作成演算子{})の引数に条件型があると、条件付きのアイテムを持つ配列が作成されるため、条件実行を作成することはできません。その代わりに、createArray 関数の呼び出しでジェネリック型を明示的に指定する必要があります。

配列処理

視覚アプリケーションのフィルタと同様に、数式演算子および関数呼び出しを配列モードで呼び出すことができます。このモードでは、数式演算はソース配列の各要素に対して複数回実行され、結果を出力として配列として作成します。演算子に配列引数が提供されるか、配列を期待しない(またはより低いランクの配列を期待する)関数引数に配列が提供される場合、全体の操作は配列モードで実行されます。配列モードでは、操作の戻り値は配列型(またはより高いランクの配列)に昇格し、操作は複数回、ソース配列の各要素ごとに1回実行され、戻り値も連続する操作の結果から構成される配列です。

配列モードの操作は、1つの引数が配列を提供する場合や、複数の異なる引数が複数のソース配列を提供する場合に実行できます。後者の場合、すべてのソース配列は同じサイズである必要があります(要素の数が同じである必要があります)。ランタイムエラーが生成されます。

例として、バイナリ加算操作を考えてみましょう:a + b。以下の表は、異なるデータ型およびaおよびb引数の値に対して生成される結果を示しています:

a b a + b
data type value data type value data type value
Integer 10 Integer 5 Integer 15
IntegerArray {10, 20, 30} Integer 5 IntegerArray {15, 25, 35}
IntegerArray {10, 20, 30} IntegerArray {5, 6, 7} IntegerArray {15, 26, 37}
IntegerArray Empty array IntegerArray Empty array IntegerArray Empty array
IntegerArray {1, 2, 3} IntegerArray {1, 2, 3, 4} IntegerArray Runtime Error

配列処理は、引数の型が操作の配列処理を明示的に指す場合には自動的に適用されます。配列処理の適用があいまいな場合、操作はデフォルトで配列処理なしの状態になります。曖昧さを解消するには、明示的な配列処理演算子を操作の配列ソース引数に適用することができます。

明示的な配列処理演算子は、次の状況で使用する必要があります:

  • 要素読み取り演算子に対して、二重ネストされた配列(例:IntegerArrayArray)の場合、arg[index]の形式の演算子は、最も外側の配列の要素にアクセスします。 arg[][index]の形式の演算子は、配列処理モードでネストされた配列の要素にアクセスします。
  • 二重ネストされた配列型のCountプロパティは、最も外側の配列のサイズを返します。 arg[].Countの構造は、ネストされた配列のサイズの配列を返します。
  • 等価テスト演算子(==および<>)は、暗黙的に配列処理を開始しません。代わりに、これらの演算子は常にオブジェクト全体を比較し、スカラーBool値を返します。 配列要素を配列モードで比較するには、少なくとも1つの引数に対して明示的な配列処理演算子を使用する必要があります。
  • デフォルト値とのマージ演算子??)では、最初の引数は、2番目の配列からデフォルト値を持つ配列項目と接続する場合など、一部の状況で明示的に配列ソースとしてマークする必要があるかもしれません(両方の引数が配列ソースの場合)。
  • ジェネリック関数呼び出し操作では、ジェネリック引数の値は、その引数に対して配列処理を考慮に入れるために、明示的な配列ソースとしてマークする必要があります(ジェネリック型が明示的に指定されていない限り)。
  • 配列作成演算子{})およびcreateArray関数呼び出しでは、すべての配列ソース引数は常に明示的にマークする必要があります。

配列モードで実行された演算の結果は、後続の外部演算に対して明示的な配列ソースと見なされます。つまり、配列処理はネストされた演算で明示的な配列処理演算子を繰り返す必要なく、連鎖的に適用されます。

例えば、aおよびbIntegerArray型の配列と考えると、次の数式のようになります。

a == b

は、両方の配列が等しいかどうかを確認し、Bool型の値を返します。 次の数式:

a[] == b[]

は、要素ごとに配列の項目の等価性を確認し、BoolArray型の配列を返します。

備考

条件演算子?:if-then-else)では、配列モード処理は条件の引数(最初の引数)が配列である場合にのみ開始できます。 ただし、操作が配列処理に入ると、TrueおよびFalse引数も配列ソースと見なされ、配列モードで要素ごとの条件処理が可能になります。 TrueおよびFalse引数にはスカラー値と配列値を混在させることもできます。

配列および条件処理の組み合わせ

単一の操作で条件および配列モード処理をトリプルネストまで組み合わせることが可能であり、操作の条件配列条件処理が行われます。

たとえば、Integer型で動作するように準備された2項の+演算子は、次の型の引数に対して実行できます:IntegerInteger?IntegerArrayInteger?Array、およびInteger?Array?Integer?Array?データ型で動作する場合、最外部の条件性修飾子により、配列全体の条件付き処理が行われ、 最内部の条件性修飾子により、配列の要素ごとの条件処理が行われます(条件は要素ごとに解決されます)。

最内部の条件(配列要素の条件)は、操作によって指定されたNilの処理ルールに従います(これは配列処理と組み合わされていない場合と同等の条件処理です)。 最外部の条件(配列条件)は、オペレータごとのルールに従わず、常にNilを整数の配列全体の実行せずに返します(配列の代わりにNilが返されます)。

備考

  • 条件演算子?:, if-then-else)のTrueおよびFalse引数は、配列モードで使用できますが、条件モードでは使用できません。 したがって、配列モードで条件演算子を使用する場合、Trueおよび/またはFalse引数に条件付き配列を指定することは禁止されています。
  • デフォルト値とのマージ演算子??)は、その引数のデータ型に対して複雑な処理の特別な要件があります。以下の構造が配列処理モードで許可されています:
    • T?Array ?? T
    • T?Array ?? T?
    • T?Array? ?? T(最初の引数での配列条件処理)
    • T?Array? ?? T?(最初の引数での配列条件処理)
    • T?Array ?? TArray(明示的な配列モードが必要)
    • T?Array ?? T?Array(明示的な配列モードが必要)
    以下の構造では配列処理モードが発生しません:
    • T?Array? ?? TArray
    • T?Array? ?? T?Array
    • T?Array? ?? TArray?
    • T?Array? ?? T?Array?
    • T?Array ?? TArray?
    • T?Array ?? T?Array?

関数

数式の一部として、以下にリストされている関数のいずれかを関数呼び出し演算子を使用して利用できます。各関数には、個々の引数の数と型に関する要件が定義されています。 同じ名前の関数でも、受け入れられるパラメータ型の異なるセットがあり、それに応じて返される値の型が異なります。 以下に、各関数の可能なシグネチャが、パラメータデータ型およびそれらから導かれる戻り値型の説明の形で定義されています。たとえば:

Real foo( Integer value1, Real value2 )

このシグネチャは、2つの引数を必要とする「foo」という関数を示しており、最初の引数の型はInteger、2番目の引数の型はRealです。この関数はReal型の値を返します。このような関数は、次のようにして数式で使用できます:

outValue = foo(10, inValue / 2) + 100

関数に渡される引数は、与えられたシグネチャと正確に一致する必要はありません。そのような場合、最適な関数バージョンが選択されます。 次に、引数の型を関数が期待する形式に変換しようとします(暗黙の型変換の原則に従って)。 引数の型に対して適切な関数バージョンを選択できない場合、または必要な型に1つ以上の引数を変換できない場合、プログラムの初期化は、不正な関数パラメータセットのエラーで終了します。

各関数の引数として条件付き型またはオプション型を使用できます。その場合、関数シグネチャが条件付き型の特別な使用を想定していない限り、関数呼び出し全体が条件付きで実行されます。 返される値も条件付き型であり、関数引数の中にNil値があると、関数の結果としてNil値が返されます。

ジェネリック関数

一部の関数は、いわゆるジェネリック型を持つ引数を受け入れます。このタイプは部分的にのみ定義され、関数は必要な実際の型に適応することができます。 このような関数は、そのシグネチャに<T>という記号があり、たとえば関数minElementです:

<T> minElement( <T>Array items, RealArray values )

この関数は、任意の型の要素を持つ配列を処理するために指定されています。最初の引数はそのジェネリック型に基づいて配列を受け入れます。そのジェネリック型の値も 結果として返されます。ジェネリック関数には1つのジェネリック型引数のみが可能であり(すべての引数および戻り値に共通)、それがそのままジェネリック型に対応します。

ジェネリック関数は通常の関数と同じように呼び出すことができます。その場合、関数のジェネリック型は指定された引数の型に基づいて自動的に推論されます:

outMinElement = minElement(inBoxArrays, inValuesArrays)

この例では、入力inBoxArraysの値はBoxArrayの型であるため、関数の戻り値の型はBoxです。

ジェネリック型を自動的に推論できない場合、または自動的に推論された型から変更する必要がある場合は、それを明示的に指定することができます。 たとえば、array関数のこの呼び出しでは:

outNilsArray = array<Box?>(4, Nil)

Box?Arrayの配列が作成され、その中には4つのNilが含まれています。

関数リスト

数学関数
変換関数
統計および配列処理関数
ジオメトリ処理関数
複雑なオブジェクトの生成
String型の関数

数学関数

sin
Real sin( Real )
Double sin( Double )

正弦(sin)三角関数の近似値を返します。引数として度数法で測定された角度を取ります。

cos
Real cos( Real )
Double cos( Double )

余弦(cos)三角関数の近似値を返します。引数として度数法で測定された角度を取ります。

tan
Real tan( Real )
Double tan( Double )

正接(tan)三角関数の近似値を返します。引数として度数法で測定された角度を取ります。

asin
Real asin( Real )
Double asin( Double )

逆正弦(asin)三角関数の近似値を返します。角度を度数法で返します。

acos
Real acos( Real )
Double acos( Double )

逆余弦(acos)三角関数の近似値を返します。角度を度数法で返します。

atan
Real atan( Real )
Double atan( Double )

逆正接(atan)三角関数の近似値を返します。角度を度数法で返します。

exp
Real exp( Real )
Double exp( Double )

数学的な定数 e を引数のべき乗とした近似値を返します: exp(x) = ex

ln
Real ln( Real )
Double ln( Double )

引数の自然対数の近似値を返します: ln(x) = loge(x)

log
Real log( Real )
Double log( Double )

引数の常用対数の近似値を返します: log(x) = log10(x)

log2
Real log2( Real )
Double log2( Double )

引数の二進対数の近似値を返します: log2(x) = log2(x)

sqrt
Real sqrt( Real )
Double sqrt( Double )

引数の平方根を返します: sqrt(x) = ²√x

floor
Real floor( Real )
Double floor( Double )

引数を切り捨て、引数以上の最大の整数を返します。

ceil
Real ceil( Real )
Double ceil( Double )

引数を切り上げ、引数以下の最小の整数を返します。

round
Real round( Real, [Integer] )
Double round( Double, [Integer] )

引数を指定された小数点以下の桁数に最も近い値に丸めます。最初の関数引数は丸められる実数です。 第二の引数は省略可能な整数で、実数がどの小数桁に丸められるかを定義します。この引数を省略すると、 最初の引数が整数に丸められます。

例:

round(1.24873, 2) → 1.25
round(1.34991, 1) → 1.3
round(2.9812) → 3.0
abs
Real abs( Real )
Integer abs( Integer )
Double abs( Double )
Long abs( Long )

引数の絶対値を返します(符号を取り除きます)。

pow
Real pow( Real, Integer )
Real pow( Real, Real )
Double pow( Double, Integer )
Double pow( Double, Double )

最初の引数を二番目の引数のべき乗であるとして、その結果を実数で返します: pow(x, y) = xy

square
Real square( Real )
Double square( Double )

引数を二乗します: square(x) = x²。

hypot
Real hypot( Real a, Real b )
Double hypot( Double a, Double b )

計算して返す式の結果です: hypot(a, b) = √a² + b²

clamp
Integer clamp( Integer value, Integer min, Integer max )
Real clamp( Real value, Real min, Real max )
Long clamp( Long value, Long min, Long max )
Double clamp( Double value, Double min, Double max )

指定された値(第一引数)を、minおよびmax引数で定義された範囲に制限します。値が範囲内に収まる場合、返り値は変更されません。値が範囲よりも下回る場合はmin引数が、範囲よりも上回る場合はmax引数が返ります。

lerp
Integer lerp( Integer a, Integer b, Real lambda )
Real lerp( Real a, Real b, Real lambda )
Long lerp( Long a, Long b, Real lambda )
Double lerp( Double a, Double b, Double lambda )
Point2D lerp( Point2D a, Point2D b, Real lambda )

2つの数値または2Dポイントの間の線形補間を計算します。補間のポイントは、第三引数で指定され、Real型で0.0から1.0の範囲です(aに等しい場合は0.0、bに等しい場合は1.0)。

Conversion functions

integer
Integer integer( Real )
Integer integer( Double )
Integer integer( Long )

引数を整数型に変換し、その小数部を切り捨てるか整数値の最上位部を無視します。

real
Real real( Integer )
Real real( Long )
Real real( Double )

引数を実数型に変換します。

long
Long long( Real )
Long long( Double )
Long long( integer )

引数を長整数型に変換し、浮動小数点値の小数部を切り捨てます。

double
Double double( Integer )
Double double( Long )
Double double( Real )

引数を倍精度浮動小数点数型に変換します。

toString
String toString( Bool )
String toString( Integer )
String toString( Real )
String toString( Long )
String toString( Double )

引数を読みやすいテキスト形式に変換します。

parseInteger, parseLong, parseFloat, parseDouble
Integer parseInteger( String )
Long parseLong( String )
Real parseReal( String )
Double parseDouble( String )

テキストで表された数値を取り、選択した数値型としてその値を返します。テキストは先頭と末尾に追加の空白文字があっても構いませんが、途中に空白文字や他の千の区切り文字が含まれていてはいけません。Real 型および Double 型では、ドットが小数点記号として使用され、10進数および指数表記の両方が許容されています(例: "-5.25"または"1e-6")。

この関数は、提供されたテキストを数値として解釈できない場合やその値が許容された型の範囲外の場合、DomainErrorを生成します。無効な入力テキストの状況を明示的に処理するには、tryParse関数のバリアントを使用します。

tryParseInteger, tryParseLong, tryParseFloat, tryParseDouble
Integer? tryParseInteger( String )
Long? tryParseLong( String )
Real? tryParseReal( String )
Double? tryParseDouble( String )

テキストで表された数値を取り、選択した数値型としてその値を返します。テキストは先頭と末尾に追加の空白文字があっても構いませんが、途中に空白文字や他の千の区切り文字が含まれていてはいけません。Real 型および Double 型では、ドットが小数点記号として使用され、10進数および指数表記の両方が許容されています(例: "-5.25"または"1e-6")。

この関数は条件付きの値を返します。提供されたテキストを数値として解釈できない場合やその値が許容された型の範囲外の場合、Nilが返されます。型の条件付き性は後で式またはプログラムで処理する必要があります。無効な入力値が予期されず、明示的に処理する必要がない場合は、より簡単なparse関数のバリアントを使用できます。

統計および配列処理関数

min
Integer min( Integer, ..., Integer )
Real min( Real, ..., Real )
Long min( Long, ..., Long )
Double min( Double, ..., Double )
Integer min( IntegerArray )
Real min( RealArray )
Long min( LongArray )
Double min( DoubleArray )

入力値の最小値を返します。この関数は、2つから4つのプリミティブな数値引数から最小値を選択するか、最小値が検索されるプリミティブな数値値の配列を取ることができます。空の配列で値を検索しようとすると、操作のランタイムエラーが報告されます。

max
Integer max( Integer, ..., Integer )
Real max( Real, ..., Real )
Long max( Long,..., Long )
Double max( Double, ..., Double )
Integer max( IntegerArray )
Real max( RealArray )
Long max( LongArray )
Double max( DoubleArray )

入力値の最大値を返します。この関数は、2つから4つのプリミティブな数値引数から最大値を選択するか、最大値が検索されるプリミティブな数値値の配列を取ることができます。空の配列で値を検索しようとすると、操作のランタイムエラーが報告されます。

indexOfMin
Integer indexOfMin( IntegerArray )
Integer indexOfMin( RealArray )
Integer indexOfMin( LongArray )
Integer indexOfMin( DoubleArray )

入力配列内の最小値の(0ベースの)インデックスを返します。配列内の複数のアイテムが条件に一致する場合、最初のアイテムのインデックスが返されます。 空の配列で値を検索しようとすると、操作のランタイムエラーが報告されます。

indexOfMax
Integer indexOfMax( IntegerArray )
Integer indexOfMax( RealArray )
Integer indexOfMax( LongArray )
Integer indexOfMax( DoubleArray )

入力配列内の最大値の(0から始まる)インデックスを返します。配列内の複数のアイテムが条件と一致する場合、最初のアイテムのインデックスが返されます。 空の配列で値を検索しようとすると、操作の実行時エラーが報告されます。

avg
Integer avg( Integer, Integer )
Real avg( Real, Real )
Long avg( Long, Long )
Double avg( Double, Double )
Point2D avg( Point2D, Point2D )
Point3D avg( Point3D, Point3D )
Integer avg( IntegerArray )
Real avg( RealArray )
Long avg( LongArray )
Double avg( DoubleArray )
Point2D avg( Point2DArray )
Point3D avg( Point3DArray )

数値入力値または幾何学的ポイントの中点(質量の中心)を計算します。この関数は2つの引数を取るか、一緒に平均化される値の配列を取ることができます。 空の配列を入力しようとすると、操作の実行時エラーが報告されます。

sum
Integer sum( IntegerArray )
Real sum( RealArray )
Long sum( LongArray )
Double sum( DoubleArray )

入力値の合計を返します。この関数は、合計されるプリミティブな数値の配列を取ることができます。 空の配列を入力する場合、0の値が返されます。

注意: 大きな値または多数の実数引数を合計する場合、結果の精度が部分的に失われ、それにより最終結果が混乱する可能性があります。 大きな値の整数を合計する場合、結果が許容されるデータ型の範囲に収まらない可能性があります。

product
Integer product( IntegerArray )
Real product( RealArray )
Long product( LongArray )
Double product( DoubleArray )

入力値の積を返します。この関数は、プリミティブな数値の配列を受け取り、それらをすべて掛け合わせます。 空の配列を入力する場合、値として1が返されます。

注意: 大きな値または多数の実数引数を掛け合わせる場合、結果の精度が部分的に失われ、それにより最終結果が混乱する可能性があります。 大きな値の整数を掛け合わせる場合、結果が許容されるデータ型の範囲に収まらない可能性があります。

variance
Real variance( RealArray )
Double variance( DoubleArray )

引数として提供される数値のセットから統計的な分散を計算します。結果は以下の式を使用して計算されます: 1n∑(x - xi)2。 空の配列を入力しようとすると、ドメインエラーが報告されます。

stdDev
Real stdDev( RealArray )
Double stdDev( DoubleArray )

引数として提供される数値のセットから統計的な標準偏差を計算します。結果は上記で説明した分散の平方根です。 空の配列を入力しようとすると、ドメインエラーが報告されます。

median
Integer median( IntegerArray )
Real median( RealArray )
Long median( LongArray )
Double median( DoubleArray )

引数として提供される数値のセットから中央値を返します。空の配列を入力しようとすると、ドメインエラーが報告されます。

nthValue
Integer nthValue( IntegerArray, Integer n )
Real nthValue( RealArray, Integer n )
Long nthValue( LongArray, Integer n )
Double nthValue( DoubleArray , Integer n)

引数として提供される数値のセットから、ソートされた順序でn番目の値を返します。0から始まるインデックスn(Integer型)は、第二引数として提供されます。 空の配列を入力しようとすると、ドメインエラーが報告されます。

quantile
Integer quantile( IntegerArray, Real point )
Real quantile( RealArray, Real point )
Long quantile( LongArray, Real point )
Double quantile( DoubleArray , Real point )

引数として提供される数値のセットから指定された分位数を返します。空の配列を入力しようとすると、ドメインエラーが報告されます。

all
Bool all( BoolArray predicates )

この関数は論理値の配列を受け取り、配列内のすべての要素がTrueに等しい場合、Trueを返します。空の配列を入力すると、Trueの値が返されます。

any
Bool any( BoolArray predicates )

この関数は論理値の配列を受け取り、配列内の少なくとも1つの要素がTrueに等しい場合、Trueを返します。空の配列を入力すると、Falseの値が返されます。

count
Integer count( BoolArray predicates )
Integer count( <T>Array items, <T> value )

この関数の最初のバリアントは論理値の配列を受け取り、Trueに等しいアイテムの数を返します。

2番目のバリアントはアイテムの配列を受け取り、その配列内で第二引数で指定された値に等しい要素の数を数えます。

contains
Bool contains( <T>Array items, <T> value )

指定された配列が特定の値を含むかどうかを確認します。

第一引数に与えられた配列が第二引数の値の少なくとも1つのインスタンスを含む場合、Trueの値を返します。

findFirst
Integer? findFirst( <T>Array items, <T> value )

指定された配列内で指定された値に等しいインスタンスを検索し、最初に見つかったアイテムの0から始まるインデックスを返します(配列の先頭に最も近い)。アイテムが見つからない場合、Nilを返します。

findLast
Integer? findLast( <T>Array items, <T> value )

指定された配列内で指定された値に等しいインスタンスを検索し、最後に見つかったアイテムの0から始まるインデックスを返します(配列の末尾に最も近い)。アイテムが見つからない場合、Nilを返します。

findAll
IntegerArray findAll( <T>Array items, <T> value )

指定された配列内で指定された値に等しいインスタンスを検索し、すべての見つかったアイテムの0から始まるインデックスの配列を返します。アイテムが見つからない場合、空の配列を返します。

minElement
<T> minElement( <T>Array items, RealArray values )

値の配列内で最小の値に対応する配列要素を返します。入力の配列サイズが一致しない場合や、空の配列が提供された場合、ドメインエラーが報告されます。

maxElement
<T> maxElement( <T>Array items, RealArray values )

値の配列内で最大の値に対応する配列要素を返します。入力の配列サイズが一致しない場合や、空の配列が提供された場合、ドメインエラーが報告されます。

removeNils
<T>Array removeNils( <T>?Array items )

配列からすべてのNil要素を削除します。簡略化された型の新しい配列を返します。

withoutNils
<T>Array? withoutNils( <T>?Array items )

配列にNilの値が含まれていない場合、元の配列を返します。

この関数は条件付きアイテム(<T>?Array)を含む配列を受け入れ、条件付き配列(<T>Array?)を返します。 ソース配列内の少なくとも1つのアイテムがNilに等しい場合、ソース配列は破棄され、Nilが返されます。それ以外の場合、ソース配列が簡略化された型で返されます。

flatten
<T>Array flatten( <T>ArrayArray items )

配列の配列を取り、すべてのネストされた配列を結合して、個々の要素を含む単一の一次元配列を作成します。

select
<T>Array select( <T>Array items, BoolArray predicates )

関連する述語がTrueであるアイテムの配列から要素を選択します。

アイテムと述語の配列は同じ数の要素を持っている必要があります。この関数は、述語の配列の要素がTrueに等しいアイテム配列の要素で構成された新しい配列を返します。

crop
<T>Array crop( <T>Array items, Integer start, Integer length )

配列要素の連続した部分列を選択します。

指定された範囲がソース配列を超える場合、要求された範囲と交差する要素のみが選択されます(その場合、関数はlengthよりも少ない要素を返します)。

trimStart
<T>Array trimStart( <T>Array items )
<T>Array trimStart( <T>Array items, Integer count )

配列の先頭からcount個の要素を削除します。デフォルトでは(count引数が省略された場合)、1つの要素を削除します。 countが配列のサイズよりも大きい場合、空の配列が返されます。

trimEnd
<T>Array trimEnd( <T>Array items )
<T>Array trimEnd( <T>Array items, Integer count )

配列の末尾からcount個の要素を削除します。デフォルトでは(count引数が省略された場合)、1つの要素を削除します。 countが配列のサイズよりも大きい場合、空の配列が返されます。

rotate (array)
<T>Array rotate( <T>Array items )
<T>Array rotate( <T>Array items, Integer steps )

指定された配列の要素をsteps箇所分回転させます。 stepsの値が正の場合、右に(大きなインデックスに向かって)回転し、負の場合は左に(小さなインデックスに向かって)回転します。デフォルトでは(steps引数が省略された場合)、1つ分右に回転します。

回転操作は、すべての要素が配列の位置に沿ってシフトされ、配列の末尾を越えてシフトされた要素は配列の先頭に戻されることを意味します。

pick
<T>Array pick( <T>Array items, Integer start, Integer step, Integer count )

等間隔で配列からアイテムを選択します。

この関数は、指定された開始位置から始まり、step量の要素をcount回繰り返してソース配列から要素を選択します。指定された範囲がソース配列を超える場合、要求された範囲と交差する要素のみが選択されます(その場合、関数はcountよりも少ない要素を返します)。

stepとして指定された値は0よりも大きい必要があります。

sequence
IntegerArray sequence( Integer start, Integer count )
IntegerArray sequence( Integer start, Integer count, Integer step )
RealArray sequence( Real start, Integer count )
RealArray sequence( Real start, Integer count, Real step )

start引数で指定された値から始まり、各アイテムの値をstepの値で増やす(stepが指定されていない場合は1ずつ増やす)count個の数値からなる配列を作成します。

array
<T>Array array( Integer count, <T> item )

itemの値を繰り返してcount個のアイテムを持つ均一な配列を作成します。

createArray
<T>Array createArray( <T> arg1, <T> arg2, ..., <T> argN )

引数で指定された任意の数の要素から配列を作成します。

基本的には、関数形式での配列作成演算子({}の同等であり、明示的なアイテムタイプの指定と空の配列作成を可能にします。

join
<T>Array join( <T>[Array] arg1, <T>[Array] arg2, ..., <T>[Array] argN )

任意の(少なくとも2つ以上の)数の配列および/またはスカラー値を一つの配列に結合します。関数引数で指定された順序で要素を持つ均一な配列を返します。

ジオメトリ処理関数

angleNorm
Real angleNorm( Real angle, Real cycle )

与えられた角度(または他の循環値)を範囲 [0...cycle) に正規化します。 cycle は正の値である必要があります(通常は180または360ですが、0より大きい任意の値が許容されます)。

angleTurn
Real angleTurn( Real startAngle, Real endAngle, Real cycle )

与えられた2つの角度の方向差を計算します。

startAngle および endAngle が [0...cycle) の範囲内の循環値であると仮定した場合、この関数はそれらの間の最短角度差を計算し、正の値は前向きの角度(startAngle から endAngle への角度)、負の値は後方への角度を返します。 cycle は正の値である必要があります。

angleDiff
Real angleDiff( Real angle1, Real angle2, Real cycle )

与えられた2つの角度の絶対差を計算します。

与えられた角度が [0...cycle) の範囲内の循環値であると仮定した場合、この関数はそれらの間の最短の絶対角度差を計算します。返される値は非負です。 cycle は正の値である必要があります。

distance
Real distance( Point2D, Point2D )
Real distance( Point2D, Segment2D )
Real distance( Point2D, Line2D )
Real distance( Point3D, Point3D )
Real distance( Point3D, Segment3D )
Real distance( Point3D, Line3D )
Real distance( Point3D, Plane3D )

点と幾何学的プリミティブの最も近い点との距離を計算します。

area
Real area( Box )
Real area( Rectangle2D )
Real area( Circle2D )
Real area( Path )
Integer area( Region )

指定された幾何学的プリミティブの表面積を計算します。

Pathプリミティブの場合、パスは閉じている必要があり、パスによって囲まれる表面積が計算されます。パスは自己交差してはいけません(その場合、不適切な結果が返されます)。

Regionプリミティブの場合、結果(Integer型)は領域内の有効なピクセルの数と同等です。

dot
Real dot( Vector2D, Vector2D )
Real dot( Vector3D, Vector3D )

2つのベクトルのドット積を計算します。

normalize
Vector2D normalize( Vector2D )
Vector3D normalize( Vector3D )

指定されたベクトルを正規化します。同じ方向を持ち、長さが1に等しいベクトルを返します。長さがゼロのベクトルが与えられた場合、結果としてゼロの長さのベクトルが返されます。

createVector
Vector2D createVector( Point2D point1, Point2D point2 )
Vector2D createVector( Real direction, Real length )

2次元ベクトル(Vector2D構造体)を作成します。最初のバリアントは2つの点間のベクトルを作成します(point1からpoint2まで)。2番目のバリアントは指定された角度(度数法)を向いており、指定された長さを持つベクトルを作成します。

createSegment
Segment2D createSegment( Point2D start, Real direction, Real length )

指定されたstartポイントで始まり、指定された方向(度数法)を向いており、指定された長さを持つ2次元のセグメント(Segment2D構造体)を作成します。

createLine
Line2D createLine( Point2D point1, Point2D point2 )
Line3D createLine( Point3D point1, Point3D point2 )
Line2D createLine( Point2D point, Real direction )

ライン(Line2DまたはLine3D構造体)を作成します。最初の2つのバリアントは指定された2つのポイントを含むラインを作成します。3番目のバリアントは指定されたポイントを含み、指定された角度(度数法)に従って方向を向いているラインを作成します。

translate
Point2D translate( Point2D point, Vector2D translation )
Point2D translate( Point2D point, Real direction, Real distance )

ポイントを移動させます。

関数の最初のバリアントは指定された平行移動ベクトルでポイントを移動します。2番目のバリアントは指定された方向(度数法で定義)に対して指定された絶対距離だけポイントを移動します。

toward
Point2D toward( Point2D point, Point2D target, Real distance)

ポイントを目標ポイントの方向に指定された絶対距離だけ移動します。ポイントと目標の実際の距離は移動距離に影響しません。負の距離値を指定すると、ポイントが目標から離れる方向に移動します。

scale
Point2D scale( Point2D point, Real scale )
Point2D scale( Point2D point, Real scale, Point2D origin )

ポイントを中心座標系の中心からの相対的な距離(関数の最初のバリアント)または指定された原点ポイントからの相対的な距離(関数の2番目のバリアント)でスケーリングします。

rotate (geometry)
Point2D rotate( Point2D point, Real angle, Point2D origin )

指定された原点を中心にして点を回転させます(度数法で指定された角度で)。

複合オブジェクトの作成

Matrix
Matrix( Integer rows, Integer cols )
Matrix( Integer rows, Integer cols, Real value )
Matrix( Integer rows, Integer cols, RealArray data )
Matrix( Integer rows, Integer cols, IntegerArray data )

指定された行数と列数を持つ新しいMatrixオブジェクトを作成して返します。 value/dataパラメータが指定されていない場合、新しい行列はゼロで埋められます。

スカラーのvalueは、新しい行列のすべての要素を設定するために三番目の引数として指定できます。

値の配列は三番目の引数(data)として指定でき、新しい行列に値を埋めます。 配列からの連続する要素は、行ごとに行列に設定され、上から下、左から右になります。 提供された配列は、作成された行列の要素数以上の要素を持っている必要があります。

identityMatrix
identityMatrix( Integer size )

指定されたサイズの正方形の単位行列Matrixオブジェクトを作成して返します。

Path
Path( Point2DArray points )
Path( Point2DArray points, Bool closed )

配列で提供された点で満たされた新しいPathオブジェクトを作成して返します。 デフォルトでは(第二の引数が指定されていない場合)、新しいパスは閉じられていません。

String型の関数

テキスト引数では、テキスト文字列を処理または検査するための関数を呼び出すことができます(オブジェクト関数呼び出し演算子に従います)。 たとえば:

outText = inText.Replace( "to-find", inNewText.ToLower() )

String型のタイプは、次のオブジェクト関数を提供します:

Substring
String arg.Substring( Integer position )
String arg.Substring( Integer position, Integer length )

この関数は、テキストの指定された部分を返します。最初の引数は、テキスト内の指定された部分が始まる位置(ゼロから開始)を定義します。2番目の引数は、返されるテキストの部分の長さを定義します(この長さはテキストの長さを超えると自動的に短縮されることがあります)。2番目の引数を省略すると、テキストの指定された位置からテキストの終わりまでの部分が返されます。

Trim
String arg.Trim()

先頭および末尾から空白文字が削除された引数の値を返します。

ToLower
String arg.ToLower()

すべての大文字の文字がそれに対応する小文字に変更された引数の値を返します。

ToUpper
String arg.ToUpper()

すべての小文字の文字がそれに対応する大文字に変更された引数の値を返します。

Replace
String arg.Replace( String find, String insert )

テキスト内の最初の引数として入力された値のすべての出現を検索し、これらの出現を第二引数として入力された値で置換します。テキスト検索は大文字と小文字を区別します。

この関数は、見つかった直後に出現を見つけてテキストを連続的に左から右に検索します。テキスト内で探している部分が重なっている場合、この方法で見つかった完全な出現のみが置換されます。

StartsWith
Bool arg.StartsWith( String )

この関数は、テキストがその始まり(左側)に引数として入力された値を含む場合(またはそれと等しい場合)にのみTrueを返します。テキスト検索は大文字と小文字を区別します。

EndsWith
Bool arg.EndsWith( String )

この関数は、テキストがその終わり(右側)に引数として入力された値を含む場合(またはそれと等しい場合)にのみTrueを返します。テキスト検索は大文字と小文字を区別します。

Contains
Bool arg.Contains( String )

この関数は、テキストが引数として入力された値を(任意の位置に部分文字列として)含む場合(またはそれと等しい場合)にのみTrueを返します。テキスト検索は大文字と小文字を区別します。

Find
Integer arg.Find( String )
Integer arg.Find( String, Integer )

この関数は、テキスト内で引数として入力された部分の最初の出現を検索し(左から右に検索を実行)、出現が見つかった位置を返します。検索している部分文字列がテキストに存在しない場合、-1を返します。テキスト検索は大文字と小文字を区別します。

オプションで、二番目の関数引数として検索を実行する開始位置を入力することができます。

FindLast
Integer arg.FindLast( String )
Integer arg.FindLast( String, Integer )

この関数は、テキスト内で引数として入力された部分の最後の出現を検索し(右から開始して検索を実行)、出現が見つかった位置を返します。検索している部分文字列がテキストに存在しない場合、-1を返します。テキスト検索は大文字と小文字を区別します。

オプションで、二番目の関数引数として検索を実行する開始位置を入力することができます(およびテキストの開始方向に進みます)。

IsEmpty
Bool arg.IsEmpty()

この関数は、テキストが空である場合(その長さが0と等しい場合)にのみTrueを返します。

構造体コンストラクタ

数式の一部として、任意の構造体のフィールドを渡したりアクセスしたりすることができます。新しい構造体の値を生成し、それをさらなるプログラム操作に渡すことも可能です。

構造体の値を生成するためには、構造体のコンストラクタ(構造体の型名と同じ構文を持つ関数)を使用します。構造体のパラメータとして、構造体のフィールドの値を連続して入力する必要があります。たとえば、以下のコンストラクタは、点 (5, 7) から始まり、幅が100、高さが200の Box 型の構造体を生成します:

Box(5, 7, 100, 200)

また、空のパラメータリストを使用してコンストラクタを呼び出すことで、デフォルトの値を持つ構造体オブジェクトを作成することもできます:

Box()

すべての構造体の型が数式内でコンストラクタを介して利用できるわけではありません。プリミティブなデータ型のフィールドから成る、お互いに依存しない構造体のみが利用可能です。たとえば、Box、Circle2D、またはSegment2D などの型は算術型から成り立っており、これらを数式内で作成することができます。一方で、Image や Region といった型は、複雑なデータブロックでプリミティブを記述しているため、数式内で作成することはできません。

一部の構造体はフィールドの値に追加の要件があります(たとえば、Box は幅と高さが非負であることが必要です)。このような要件が満たされない場合、実行時にドメインエラーが発生します。

Typed Nil コンストラクタ

条件付き型の空の値を表す Nil シンボルは、それ自体ではデータ型を提供しません。Nil 値の具体的なデータ型を指定する必要がある構造(配列の構築ジェネリック関数の呼び出しのような)では、データ型名を呼び出して単一の Nil シンボルを引数として提供することができます:

Integer(Nil)
Box(Nil)
Segment2D(Nil)

二つの整数値の合計

フィルタの入力:
  • inA、型: Integer
  • inB、型: Integer
フィルタの出力:
  • outSum、型: Integer
outSum = inA + inB

二つの整数値の線形補間

与えられた二つの整数値と、それらの間の位置を示す0から1の範囲の実数がある場合、この位置での補間値を計算するタスクです。

フィルタの入力:
  • inA、型: Integer
  • inB、型: Integer
  • inPos、型: Real
フィルタの出力:
  • outValue、型: Integer
outValue = integer(round( inA * (1 - inPos) + inB * inPos ))

ここでは、二つの与えられた値の単純な重み付き平均が行われています。実数値で乗算されているため、中間の平均結果も実数値です。 その後、最終結果を四捨五入して整数値に変換する必要があります。

ボックスの中心を計算する

ボックスは、X、Y、幅(Width)、高さ(Height)の4つの整数型フィールドで構成されるデータ構造です。このようなプリミティブオブジェクトが与えられた場合、その中心を2つの整数座標XとYで計算するタスクがあります。

フィルタの入力:
  • inBox、型: Box
フィルタの出力:
  • outX、型: Integer
  • outY、型: Integer
outX = inBox.X + inBox.Width div 2
outY = inBox.Y + inBox.Height div 2

構造の生成

前の例では、数式で使用されるデータは型がBoxのプリミティブから読み取られます。このようなプリミティブは数式内で生成して出力に渡すこともできます。この例では、与えられた幅のフレームでBoxプリミティブを拡大したいとします。

フィルタの入力:
  • inBox of type Box
  • inFrame of type Integer
フィルタの出力:
  • outBox of type Box
outBox = Box( inBox.X - inFrame, inBox.Y - inFrame, inBox.Width + inFrame*2, inBox.Height + inFrame*2 )

部分的な条件付き実行

条件付きの型を扱う場合、数式ブロックの一部としてプリミティブ型を使用し、条件付きフィルタの実行、および数式ブロック全体の条件付き実行を行うことができます。また、条件付き実行を数式内に渡すことも可能です。これにより、数式ブロックの一部、または単一の数式の一部だけが条件付きで実行されます。

以下に示すように、シンプルな合計の場合、パラメータBは条件付きの型であり、この条件が出力に渡されます。

フィルタの入力:
  • inA of type Real
  • inB of type Real?
  • inC of type Integer
フィルタの出力:
  • outValue of type Real?
outValue = inA + inB + inC

数式の内容自体には、条件付きのパラメータに関連する特定の要素は含まれていません。条件付きの型がついたのは数式の出力のみです。 入力の空の値が発生すると、それ以降の演算の実行が中断され、空の値が出力に移動します。これはフィルタの操作と同様の方法です。

空の値をデフォルトのオブジェクトで置き換える

上記の例で条件付きの出力型およびそれによって後続のフィルタの条件付き実行モードが不要な場合、同じ数式内で依然として条件付きの型を解決することができます。これは非条件付きのデフォルト値との接続を作成することによって行います。

フィルタの入力:
  • inA of type Real
  • inB of type Real?
  • inC of type Integer
フィルタの出力:
  • outValue of type Real
outValue = (inA + inB + inC) ?? 0

加算演算子はまだ条件付きの型で機能し、その計算の全体が空の値が発生したときに中断される可能性があります。ただし、結果は0のデフォルト値とマージされます。足し算が非空の結果を返さない場合、結果の値はそのような非空の値で置き換えられます。その場合、出力は条件付きの型である必要はありません。

空の配列への応答

数値の配列の中で最大値を見つけるには、max関数を使用できますが、非空の配列が必要です。このようなケースに対して明示的なリアクションが可能であれば、条件でそれを定義し、入力に空のシーケンスを渡すことでエラーを回避することができます。

フィルタの入力:
  • inElements of type IntegerArray
フィルタの出力:
  • outValue of type Integer
outValue = (inElements.Count > 0) ? max(inElements) : 0

上記の例では、空の配列の代わりにゼロの値が入力されます。

範囲テスト

仮に、-5...10の範囲で変化するあるパラメータの位置をテストし、その値を0...1の範囲に正規化したいとしましょう。さらに、エラーへの反応やパラメータによる範囲のオーバーランへの反応は、空の値を返すこと(つまり、さらなる操作の条件付き実行)です。

フィルタの入力:
  • inParameter of type Real
フィルタの出力:
  • outRangePos of type Real?
outRangePos = (inValue >= -5 and inValue <= 10) ? (inValue + 5) / 15 : Nil

定数の列挙値の選択

列挙型をパラメータとして受け取る操作を制御するために、ブロックの結果がそのような型の値を生成することができます。 以下の例では、Bool型のフラグが与えられ、その方向がデフォルトとは逆であるべきかどうかを判断します。

フィルタの入力:
  • inReverse of type Bool
フィルタの出力:
  • outOrder of type SortingOrder
outOrder = inReverse ? SortingOrder.Descending : SortingOrder.Ascending

ループ内の整数値の加算

この例はループ内で動作し、各反復でinValue入力にいくつかの値が渡され、これらの値を合計することが目標です。prev演算子は最初の反復で0を返します(その第2引数で定義されているように)。各反復で、inValue入力の値が前の反復からの合計に加えられます。

フィルタの入力:
  • inValue of type Integer
フィルタの出力:
  • outSum of type Integer
outSum = prev(outSum, 0) + inValue