リテラル

ユニット リテラル

Unitの既存の唯一のリテラルは値 () です。

Unit 値は、他の引数を渡す必要がない、または実行を遅らせるために、callable に対する引数として一般的に使用されます。 これは他の値を返す必要がない場合の戻り値としても使用されます。ユニタリ演算 (つまり、AdjointControlled のいずれかまたは両方のファンクターをサポートする演算) の場合です。

Int リテラル

Intの値リテラルは、バイナリ、8 進数、10 進数、または 16 進表記で表現できます。 バイナリで表現されるリテラルの先頭には 0b、8 進数の場合は 0o、16 進数の場合は 0x が付きます。 一般に使用されている 10 進数表記にはプレフィックスは付きません。

[表記] 値リテラル
2 項 0b101010
8 進変換 0o52
Decimal 42
16 進数 0x2a

BigInt リテラル

BigIntの値リテラルの末尾には常に L が付き、バイナリ、8 進数、10 進数、または 16 進表記で表現できます。 バイナリで表現されるリテラルの先頭には 0b、8 進数の場合は 0o、16 進数の場合は 0x が付きます。 一般に使用されている 10 進数表記にはプレフィックスは付きません。

[表記] 値リテラル
2 項 0b101010L
8 進変換 0o52L
Decimal 42L
16 進数 0x2aL

Double リテラル

Doubleの値リテラルは、標準または指数表記で表現できます。

[表記] 値リテラル
Standard 0.1973269804
[指数] 1.973269804e-1

小数点の後に何もない場合、小数点以下の桁を省略できます。 たとえば、1. は有効な Double リテラルであり、1.0 と同じです。

ブール リテラル

Boolの既存のリテラルは、truefalse です。

文字列リテラル

Stringの値リテラルは任意の長さの Unicode 文字シーケンスであり、二重引用符で囲みます。 文字列の中で、バックスラッシュ文字 \ を使用して二重引用符をエスケープでき、改行は \n として、キャリッジ リターンは \r として、タブは \t として挿入できます。

有効な文字列リテラルの例を次に示します。

"This is a simple string."
"\"This is a more complex string.\", she said.\n"

Q# では、"補間された文字列" もサポートします。 補間された文字列は、任意の数の補間式を含めることができる文字列リテラルです。 これらの式は任意の型にすることができます。 作成時に式が評価され、それらの String 表記が、定義されたリテラル内の対応する位置に挿入されます。 補間を有効にするには、最初の引用符の前に特殊文字 $ を直接 (間に空白を入れずに) 付けます。

たとえば、res1 に評価される式である場合、次の String リテラルの 2 番目の文には "The result was 1." と表示されます。

$"This is an interpolated string. The result was {res}."

量子ビット リテラル

Qubitのリテラルは存在しません。量子メモリはランタイムによって管理されるためです。 したがって、型 Qubit の値は、割り当てによってのみ取得できます。

Qubit の値は不透明な識別子を表し、これによって量子ビット ("キュービット") を処理できます。 これらでサポートされる演算子は、等値比較のみです。 Qubit データ型の詳細については、「量子ビット」を参照してください。

結果リテラル

Resultの既存のリテラルは、ZeroOne です。

Result の値は、バイナリ量子測定の結果を表します。 Zeroは +1 固有空間への投影を示し、One は、-1 固有空間の投影を示します。

パウリ リテラル

Pauliの既存のリテラルは、PauliIPauliXPauliYPauliZ です。

Pauli の値は、4 つの単一量子ビット パウリ行列の 1 つを表し、PauliI は ID を表します。 型 Pauli の値は、一般に、回転の軸を示すため、および測定する基準を指定するために使用されます。

範囲リテラル

Rangeの値リテラルは、形式 start..step..stop の式です。この場合、startstepend は型 Int の式です。 ステップのサイズが 1 の場合、これを省略できます。 たとえば、start..stop は有効な Range リテラルであり、start..1..stop と同じです。

Range の値は、整数のシーケンスを表します。この場合、シーケンス内の最初の要素は start であり、以降の要素は step を前の要素に追加して取得し、stop が渡されるまで続けます。 Range 値は両端を含みます。つまり、範囲の最後の要素は、startstop の間の差が step の倍数である場合に stop になります。 たとえば step が正であり、stop < start である場合、範囲が空になる可能性があります。

有効な Range リテラルの例を次に示します。

  • 1..3 は範囲 1、2、3 です。
  • 2..2..5 は範囲 2、4 です。
  • 2..2..6 は範囲 2、4、6 です。
  • 6..-2..2 は範囲 6、4、2 です。
  • 2..-2..1 は範囲 2 です。
  • 2..1 は空の範囲です。

詳細については、コンテキスト式に関する記事を参照してください。

配列リテラル

配列リテラルは、0 個以上の式のシーケンスであり、コンマで区切られ、角かっこ[]で囲まれています。たとえば、 [1,2,3]です。 すべての式は共通の基本データ型になっている必要があり、これがその配列の項目の種類になります。 で空の配列を指定した []場合、コンパイラが式の適切な型を判断するために型注釈が必要になる場合があります。

任意の長さの配列は、size-array 式を使用して作成できます。 このような式は の形式[expr, size = s]です。ここでs、型Intの任意の式を指定でき、繰り返sexpr配列の項目となる値に評価されます。 たとえば、 は [1.2, size = 3][1.2, 1.2, 1.2]同じ配列を作成します。

タプル リテラル

タプル リテラルは、コンマで区切られ、かっこ() で囲まれた任意の型の 1 つ以上の式のシーケンスです。 タプルの型には、各項目の種類に関する情報が含まれます。

値リテラル
("Id", 0, 1.) (String, Int, Double)
(PauliX,(3,1)) (Pauli, (Int, Int))

1 つの項目を含むタプルは、型と値の両方において、その項目自体と同一として扱われます。これはシングルトン タプルの等価性と呼ばれます。

タプルを使用して値を 1 つの値にバンドルし、簡単に渡せるようにします。 これにより、すべての callable が入力を 1 つだけ受け取って、出力を 1 つだけ返すようにすることができます。

ユーザー定義型のリテラル

ユーザー定義型の値は、コンストラクターを呼び出すことで作成されます。 既定のコンストラクターは、型を宣言すると自動的に生成されます。 現在、カスタム コンストラクターは定義できません。

たとえば、IntPair に型 Int の 2 つの項目がある場合、IntPair(2, 3) を指定すると、既定のコンストラクターを呼び出して新しいインスタンスが作成されます。

操作と関数のリテラル

匿名の操作と関数は、ラムダ式を使用して作成できます。