Villkorliga uttryck
Villkorsuttryck består av tre underuttryck, där det vänstra deluttrycket är av typen Bool
och avgör vilket av de två andra underuttrycken som utvärderas. De är av formen
cond ? ifTrue | ifFalse
Mer specifikt, om cond
utvärderas till true
utvärderas villkorsuttrycket till ifTrue
uttryck. annars utvärderas det till uttrycket ifFalse
. Det andra uttrycket (ifFalse
respektive ifTrue
uttryck) utvärderas aldrig, ungefär som grenarna i en if
-instruktion.
I ett uttryck a == b ? C(qs) | D(qs)
, om a
är lika med b
anropas till exempel den anropbara C
. Annars anropas D
.
Typerna av ifTrue
och ifFalse
-uttrycket måste ha en gemensam bastyp. Oberoende av vilket som i slutändan ger det värde som uttrycket utvärderas till matchar dess typ alltid den fastställda bastypen.
Om du till exempel
-
Op1
är av typenQubit[] => Unit is Adj
-
Op2
är av typenQubit[] => Unit is Ctl
-
Op3
är av typenQubit[] => Unit is Adj + Ctl
sedan...
-
cond ? Op1 | Op2
är av typenQubit[] => Unit
-
cond ? Op1 | Op3
är av typenQubit[] => Unit is Adj
-
cond ? Op2 | Op3
är av typenQubit[] => Unit is Ctl
Mer information finns i undertypning.