Share via


Feltételes hurkok

A legtöbb klasszikus programozási nyelvhez hasonlóan támogatja azokat a hurkokat is, Q# amelyek egy feltétel alapján törnek el: olyan ciklusokat, amelyeknél az iterációk száma ismeretlen, és futtatástól futtatásig változhatnak. Mivel az utasításütemezés fordításkor ismeretlen, a fordító ezeket a feltételes hurkokat egy adott módon kezeli egy kvantum-futtatókörnyezetben.

Fontos

Kvantumhardver-korlátozások

Ha a feltétel a mérési eredményektől függ, a feltétel alapján megszakított hurkok feldolgozása kihívást jelent a kvantumhardveren, mivel a futtatandó utasításütemezés hossza nem ismert előre.

Annak ellenére, hogy a kvantum algoritmusok bizonyos osztályaiban gyakoriak, a jelenlegi hardver még nem nyújt natív támogatást az ilyen típusú vezérlési folyamat szerkezetekhez. Az ilyen típusú hurkok kvantumhardveren való futtatását a jövőben maximális számú iteráció alkalmazásával, vagy további hardvertámogatások elérhetővé válásával lehet támogatni. A kvantumszimulátorok azonban bármilyen hurkot futtatnak a mérések alapján.

Hurkok fordítása

Amíg a feltétel nem függ a kvantumméréstől, a feltételes hurkok feldolgozása igény szerinti fordítással történik, mielőtt elküldené az utasításütemezést a kvantumprocesszornak. A feltételes hurkok függvényeken belüli használata különösen nem problémamentes, mivel a függvényeken belüli kód mindig futtatható hagyományos (nem kvantumos) hardveren. Q#, ezért támogatja a hagyományos while hurkok függvényeken belüli használatát.

Kifejezés ismétlése

A kvantumszimulátorokon futó programok lehetővé teszik a Q# kvantummérések eredményeitől függő vezérlési folyamat expressz vezérlését. Ez a képesség lehetővé teszi a valószínűségi implementációkat, amelyek jelentősen csökkenthetik a számítási költségeket. Gyakori példa a sikerességig ismétlődő minta, amely addig ismétli a számításokat, amíg egy bizonyos feltétel - amely általában egy méréstől függ - teljesül. Az ilyen repeat hurkokat széles körben használják a kvantum-algoritmusok bizonyos osztályaiban. Q# ezért dedikált nyelvi szerkezettel rendelkezik a kifejezésükhöz, annak ellenére, hogy továbbra is kihívást jelentenek a kvantumhardveren való végrehajtáshoz.

A repeat kifejezés a következő formában jelenik meg

repeat {
    // ...
}
until condition
fixup {
    // ...
}

vagy másik lehetőségként

repeat {
    // ...
}
until condition;

ahol condition egy tetszőleges típusú kifejezés.Bool

A repeat ciklus egy utasításblokkot futtat egy feltétel kiértékelése előtt. Ha a feltétel igaz értéket ad vissza, a hurok kilép. Ha a feltétel false (hamis) értéket ad vissza, a rendszer a következő ciklus iterációjának megadása előtt futtat egy további, opcionális fixup blokk részeként definiált utasításblokkot.

A while hurok

A klasszikus számításokhoz ismerősebbnek tűnő hurok a while hurok, amely a kulcsszóból while, egy típuskifejezésből Boolés egy utasításblokkból áll. Ha például arr pozitív egész számok tömbje,

mutable (item, index) = (-1, 0);
while index < Length(arr) && item < 0 {
    set item = arr[index];
    set index += 1;
}

Az utasításblokk addig fut, amíg a feltétel kiértékelése a következőre történik: true.