================================================================================ Subroutines and external functions ================================================================================ def parity(bit[2] b) -> bit { return b[0] ^ b[1]; } def flip(qubit target, int[32] times, readonly array[int[8], #dim = 1] a, creg m[2]) { for int j in [0:times - 1] { x target; } } extern energy(float[64], uint[8]) -> float[64]; flip(q[0], 3); result[1] = parity(m); -------------------------------------------------------------------------------- (source_file (subroutine_definition (identifier) (parameter_list (parameter (scalar_type (designator (integer_literal))) (identifier))) (return_signature (scalar_type)) (scope (return_statement (binary_expression (index_expression (identifier) (index (integer_literal))) (index_expression (identifier) (index (integer_literal))))))) (subroutine_definition (identifier) (parameter_list (parameter (qubit_type) (identifier)) (parameter (scalar_type (designator (integer_literal))) (identifier)) (parameter (array_reference_type (scalar_type (designator (integer_literal))) (integer_literal)) (identifier)) (parameter (identifier) (designator (integer_literal)))) (scope (for_statement (scalar_type) (identifier) (range (range_expression (integer_literal) (binary_expression (identifier) (integer_literal)))) (scope (gate_call (identifier) (operand_list (indexed_identifier (identifier)))))))) (extern_declaration (identifier) (scalar_type (designator (integer_literal))) (scalar_type (designator (integer_literal))) (return_signature (scalar_type (designator (integer_literal))))) (expression_statement (call_expression (identifier) (argument_list (index_expression (identifier) (index (integer_literal))) (integer_literal)))) (assignment_statement (indexed_identifier (identifier) (index (integer_literal))) (call_expression (identifier) (argument_list (identifier)))))