式の呼び出し
呼び出し式は、任意のプログラミング言語の重要な部分です。 操作と関数の呼び出しは、部分適用と同じように、返される値が適切な型である限り、任意の場所で式として使用することができます。
この形式で操作を呼び出すことの有用性は、主にデバッグにあります。このような操作呼び出しは、任意 Q# のプログラムで最も一般的なコンストラクトの 1 つです。 同時に、操作は他の操作内からのみ呼び出すことができ、関数内から呼び出すことはできません。 詳細については、「量子ビット」も参照してください。
呼び出し可能関数がファースト クラスの値である場合、呼び出し式は、独自の専用言語コンストラクトを利用するのに十分に一般的ではないパターンをサポートする一般的な方法です。または、他の理由で専用構文がまだ導入されていません。 その目的を果たすライブラリ メソッドのいくつかの例として、古典的なビットの設定に対して条件付きの操作を呼び出す ApplyIf
、配列の各要素に特定の操作を適用する ApplyToEach
、以下のサンプルに示す ApplyWithInputTransformation
などがあります。
operation ApplyWithInputTransformation<'TArg, 'TIn>(
fn : 'TIn -> 'TArg,
op : 'TArg => Unit,
input : 'TIn
) : Unit {
op(fn(input));
}
ApplyWithInputTransformation
は、関数 fn
、操作 op
、input
値を引数として受け取り、指定された関数を入力に適用してから、関数から返された値を使用して指定された操作を呼び出します。
特定のファンクターをサポートするためにコンパイラが特殊化を自動生成するには、通常、呼び出される操作でもそれらのファンクターがサポートされている必要があります。 ただし、Adjoint
ファンクターを常にサポートする必要があるが Controlled
ファンクターをサポートする必要がない共役の外部ブロックでの呼び出しと、個々の呼び出しに追加の要件を課さずに Adjoint
ファンクターをサポートする自己随伴操作の 2 つは例外です。