Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las expresiones de llamada son una parte importante de cualquier lenguaje de programación. Las llamadas de operación y función, al igual que aplicaciones parciales, se pueden usar como expresión en cualquier lugar, siempre y cuando el valor devuelto sea de un tipo adecuado.
La utilidad de las operaciones de llamada en este formato reside principalmente en la depuración, y estas llamadas de operación son una de las construcciones más comunes en cualquier programa de Q#. Al mismo tiempo, solo se puede llamar a las operaciones desde otras operaciones y no desde dentro de las funciones. Para obtener más información, consulte también qubits.
Con los invocables siendo valores de primera clase, las expresiones de llamada son una forma genérica de admitir patrones que no son lo suficientemente comunes como para merecer su propia construcción de lenguaje dedicado, o la sintaxis dedicada aún no se ha introducido por otras razones. Algunos ejemplos de métodos de biblioteca que sirven para ese propósito son ApplyIf, que invoca una operación condicional en un bit clásico que se establece; ApplyToEach, que aplica una operación determinada a cada elemento de una matriz; y ApplyWithInputTransformation, como se muestra en el ejemplo siguiente.
operation ApplyWithInputTransformation<'TArg, 'TIn>(
fn : 'TIn -> 'TArg,
op : 'TArg => Unit,
input : 'TIn
) : Unit {
op(fn(input));
}
ApplyWithInputTransformation toma una función fn, una operación opy un valor de input como argumentos y, a continuación, aplica la función dada a la entrada antes de invocar la operación dada con el valor devuelto por la función.
Para que el compilador genere automáticamente las especializaciones para admitir functores concretos, normalmente requiere que las operaciones llamadas también admitan esos funtores. Las dos excepciones son llamadas en bloques externos de conjugaciones, que siempre necesitan admitir el functor de Adjoint, pero nunca necesitan admitir el functor de Controlled y las operaciones autodjuntas, que admiten el functor de Adjoint sin imponer requisitos adicionales en las llamadas individuales.