$use StdIO; $func? G e = ; $func? F s s (e) = s s (e); G e = $fail; F s1 s2 (e3), \{ \? { # > \! , 0 0 (00); s1 s1 (s2 e3); } :: s1 s2 (e3), s2 s2 (s2); 11 22 (); }; /* * RF_FUNC (F, (RF_ARG s_1, s_2, e_3), (RF_RES res_1, res_2, res_3)) * if (!(RF_CALL (G, (), ())) * { * goto L_Block_1_Block_1_Fail_1; * }; * if (!(RF_CALL (G, (), ())) * { * goto L_Block_1_Fail_1; * }; * res_1 = 0; * res_2 = 0; * res_3 = 00; * goto L_Block_1_Block_1_Success; * L_Block_1_Block_1_Fail_1: * res_1 = s_1; * res_2 = s_1; * res_3 = s_2 + e_3; * goto L_Block_1_Block_1_Success; * L_Block_1_Block_1_Fail_2: * goto L_ERROR; * L_Block_1_Block_1_Success: * goto L_Block_1_Success; * L_Block_1_Fail_1: * res_1 = 11; * res_2 = 22; * res_3 = empty; * goto L_Block_1_Success; * L_Block_1_Fail_2: * goto L_ERROR; * L_Block_1_Success: * goto L_END; * L_ERROR: * FATAL ("!!!"); * L_END: * RF_END */ /* * RF_FUNC (F, (RF_ARG s_1, s_2, e_3), (RF_RES res_1, res_2, res_3)) * if (RF_CALL (F, (1, 1, 1), (F_res_1, F_res_2, F_res_3))) * { * if (RF_CALL (G, (F_res_1 + F_res_2 + F_res_3 ()), ())) * { * if (RF_CALL (G, (), ())) * { * res_1 = 0; * res_2 = 0; * res_3 = 00; * return; * }; * res_1 = 11; * res_2 = 22; * res_3 = empty; * return; * FATAL ("Unexpected fail"); * }; * }; * res_1 = s_1; * res_2 = s_1; * res_3 = s_2 + e_3; * return; * retfail; * RF_END */ Main , :: s1 s2 (e3), , >;