リテラル
ユニット リテラル
Unit
型の既存の唯一のリテラルは値 ()
です。
Unit
値は、他の引数を渡す必要がない、または実行を遅らせるために、callable に対する引数として一般的に使用されます。 これは他の値を返す必要がない場合の戻り値としても使用されます。ユニタリ演算 (つまり、Adjoint
と Controlled
のいずれかまたは両方のファンクターをサポートする演算) の場合です。
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
型の既存のリテラルは、true
と false
です。
文字列リテラル
String
型の値リテラルは任意の長さの Unicode 文字シーケンスであり、二重引用符で囲みます。
文字列の中で、バックスラッシュ文字 \
を使用して二重引用符をエスケープでき、改行は \n
として、キャリッジ リターンは \r
として、タブは \t
として挿入できます。
有効な文字列リテラルの例を次に示します。
"This is a simple string."
"\"This is a more complex string.\", she said.\n"
Q# では、"補間された文字列" もサポートします。
補間された文字列は、任意の数の補間式を含めることができる文字列リテラルです。 これらの式は任意の型にすることができます。
作成時に式が評価され、それらの String
表記が、定義されたリテラル内の対応する位置に挿入されます。 補間を有効にするには、最初の引用符の前に特殊文字 $
を直接 (間に空白を入れずに) 付けます。
たとえば、res
が 1
に評価される式である場合、次の String
リテラルの 2 番目の文には "The result was 1." と表示されます。
$"This is an interpolated string. The result was {res}."
量子ビット リテラル
Qubit
型のリテラルは存在しません。量子メモリはランタイムによって管理されるためです。 したがって、型 Qubit
の値は、割り当てによってのみ取得できます。
型 Qubit
の値は不透明な識別子を表し、これによって量子ビット ("キュービット") を処理できます。 これらでサポートされる演算子は、等値比較のみです。
Qubit
データ型の詳細については、「量子ビット」を参照してください。
結果リテラル
Result
型の既存のリテラルは、Zero
と One
です。
型 Result
の値は、バイナリ量子測定の結果を表します。
Zero
は +1 固有空間への投影を示し、One
は、-1 固有空間の投影を示します。
パウリ リテラル
Pauli
型の既存のリテラルは、PauliI
、PauliX
、PauliY
、PauliZ
です。
型 Pauli
の値は、4 つの単一量子ビット パウリ行列の 1 つを表し、PauliI
は ID を表します。
型 Pauli
の値は、一般に、回転の軸を示すため、および測定する基準を指定するために使用されます。
範囲リテラル
Range
型の値リテラルは、形式 start..step..stop
の式です。この場合、start
、step
、end
は型 Int
の式です。 ステップのサイズが 1 の場合、これを省略できます。 たとえば、start..stop
は有効な Range
リテラルであり、start..1..stop
と同じです。
型 Range
の値は、整数のシーケンスを表します。この場合、シーケンス内の最初の要素は start
であり、以降の要素は step
を前の要素に追加して取得し、stop
が渡されるまで続けます。
Range
値は両端を含みます。つまり、範囲の最後の要素は、start
と stop
の間の差が 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
の任意の式を指定でき、繰り返s
しexpr
配列の項目となる値に評価されます。 たとえば、 は [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)
を指定すると、既定のコンストラクターを呼び出して新しいインスタンスが作成されます。
操作と関数のリテラル
匿名の操作と関数は、ラムダ式を使用して作成できます。