Functor 是可讓您存取可呼叫之特定特製化實作的處理站。
Q# 目前支援兩個函式;Adjoint 和 Controlled,這兩者都可以套用至提供必要特製化的作業。
Controlled 和 Adjoint 函式通勤:如果 ApplyUnitary 是同時支援這兩個函式的作業,則 Controlled Adjoint ApplyUnitary 與 Adjoint Controlled ApplyUnitary之間沒有任何差異。
兩者都有相同的型別,並在調用時,執行針對 controlled adjoint特製化所定義的實作。
Adjoint functor
如果作業 ApplyUnitary 定義量子狀態的統一轉換 U,Adjoint ApplyUnitary 存取 U†的實作。
Adjoint 函式是它自己的反函數,因為定義 (U†)† = U。 例如,Adjoint Adjoint ApplyUnitary 與 ApplyUnitary相同。
表達式 Adjoint ApplyUnitary 是與 ApplyUnitary相同類型的作業;它有相同的自變數和傳回類型,並支援相同的函式。 如同任何作業,可以使用適合類型的自變數來叫用它。 下列表達式會將 ApplyUnitary 的 相鄰特製化 套用至自變數 arg:
Adjoint ApplyUnitary(arg)
受控制函式
針對定義量子狀態 U 單一轉換的作業 ApplyUnitary,Controlled ApplyUnitary 存取套用 U 條件的實作,條件式套用在處於 |1⟩ 狀態之控制量子位數組中的所有量子位。
表達式 Controlled ApplyUnitary 是具有相同傳回型別和 作業特性的作業, 為 ApplyUnitary,這表示它支援相同的函式。
它會採用類型為 (Qubit[], <TIn>)的自變數,其中 <TIn> 應取代為 ApplyUnitary的自變數類型,並將 單一元組等價 納入考慮。
| 行動 | 自變數類型 | 受控自變數類型 |
|---|---|---|
| X | Qubit |
(Qubit[], Qubit) |
| 交換 | (Qubit, Qubit) |
(Qubit[], (Qubit, Qubit)) |
具體地說,如果 cs 包含量子位數組,q1 和 q2 是兩個量子位,而且作業 SWAP 如這裡 所定義,則下列表達式會交換 q1 的狀態,如果 cs 中的所有量子位都處於 |1⟩狀態,則下列表達式會交換 q1 和 q2:
Controlled SWAP(cs, (q1, q2))
備註
根據處於 |1 以外狀態的控件量子位,有條件地套用作業⟩可以藉由在叫用之前將適當的相鄰轉換套用至控件量子位,並在之後套用反向。 例如,在 |0⟩ 狀態的所有控制量子位上調理轉換,可以透過套用前後的 X 作業來達成。 這可以使用 結合方便表示。 儘管如此,這類建構的詳細資訊在未來可能值得額外支援更精簡的語法。