Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Functors adalah pabrik yang memungkinkan Anda mengakses implementasi spesialisasi tertentu dari yang dapat dipanggil.
Q# saat ini mendukung dua funktor; Adjoint dan Controlled, yang keduanya dapat diterapkan ke operasi yang memberikan spesialisasi yang diperlukan.
Funktor Controlled dan Adjoint komute; jika ApplyUnitary adalah operasi yang mendukung kedua funktor, maka tidak ada perbedaan antara Controlled Adjoint ApplyUnitary dan Adjoint Controlled ApplyUnitary.
Keduanya memiliki jenis yang sama dan, setelah pemanggilan, jalankan implementasi yang ditentukan untuk spesialisasi controlled adjoint.
Funktor berdampingan
Jika operasi ApplyUnitary menentukan transformasi uniter U status kuantum, Adjoint ApplyUnitary mengakses implementasi U†. Functor Adjoint adalah kebalikannya sendiri, karena (U†)† = U menurut definisi. Misalnya, Adjoint Adjoint ApplyUnitary sama dengan ApplyUnitary.
Ekspresi Adjoint ApplyUnitary adalah operasi dengan jenis yang sama dengan ApplyUnitary; ini memiliki argumen yang sama dan jenis pengembalian dan mendukung funktor yang sama. Seperti operasi apa pun, ini dapat dipanggil dengan argumen jenis yang sesuai. Ekspresi berikut menerapkan spesialisasi adjointApplyUnitary ke argumen arg:
Adjoint ApplyUnitary(arg)
Funktor terkontrol
Untuk ApplyUnitary operasi yang menentukan transformasi uniter U status kuantum, Controlled ApplyUnitary mengakses implementasi yang menerapkan U kondisional pada semua qubit dalam array kubit kontrol berada dalam status |1⟩.
Ekspresi Controlled ApplyUnitary adalah operasi dengan jenis pengembalian yang sama dan karakteristik operasi sebagai ApplyUnitary, yang berarti mendukung funktor yang sama.
Dibutuhkan argumen jenis (Qubit[], <TIn>), di mana <TIn> harus diganti dengan jenis argumen ApplyUnitary, dengan mempertimbangkan kesetaraan tuple singleton.
| Operasi | Tipe Argumen | Tipe Argumen Terkontrol |
|---|---|---|
| X | Qubit |
(Qubit[], Qubit) |
| SWAP | (Qubit, Qubit) |
(Qubit[], (Qubit, Qubit)) |
Secara konkret, jika cs berisi array qubit, q1 dan q2 adalah dua qubit, dan SWAP operasi seperti yang didefinisikan di sini, ekspresi berikut bertukar status q1 dan q2 jika semua qubit dalam cs berada dalam status |1⟩:
Controlled SWAP(cs, (q1, q2))
Nota
Menerapkan operasi secara kondisional berdasarkan qubit kontrol yang berada dalam status selain status |1⟩ dapat dicapai dengan menerapkan transformasi yang dapat digabungkan yang sesuai ke kubit kontrol sebelum pemanggilan, dan menerapkan inversi setelahnya. Mengondisikan transformasi pada semua qubit kontrol yang berada dalam status |0⟩, misalnya, dapat dicapai dengan menerapkan operasi X sebelum dan sesudah. Ini dapat dengan mudah diekspresikan menggunakan konjugasi . Meskipun demikian, verbositas konstruksi semacam itu dapat memuaskan dukungan tambahan untuk sintaks yang lebih ringkas di masa depan.