Re: Breaking the silence

new topic     » goto parent     » topic index » view thread      » older message » newer message

Peter Robinson wrote:
> 
> Hi CK
> 
> Thanks for reply. I certainly wasn't bothered by anyone's comments, nor by
> their
> actions in advancing Euphoria. In view of the fact that I'm responsible for
> not speaking up often, I think it's fair enough that people read some
> indifference
> into that.
> 
> But I have been looking at a pattern requiring backward jumps:-
> 
> <pre-loop loop-related initialisations>
> <pre-loop loop-related statements>
> <outer loop start>
>         <stuff>
> 	<inner loop start>
> 		<error tests>
> 		<general data check>
> 		<if start>
> 			<case 1> -- data passes with flying colours
> 			<do the business>
> 			<case 2> -- data not right, but not hopeless
> 			<modify or prune data>
> 			<retry> -- goto ????????????
> 			<case 3> -- different data not right, not hopeless
> 			<modify or prune data>
> 			<retry> -- goto ????????????
> 			<case 4> -- hopeless data
> 			<return or exit>
> 		<end if>
> 	<end inner loop>
> <end outer loop>
> 
> This is a fairly typical pattern where you might want to back up. The
> <elements>
> could represent statements or groups of statements with or without more loops
> and conditionals.
> 
> What are the likely re-try points for the retries in this pattern?
> 
> I think they could easily be before the pre-loop code, at the start of the
> outer
> loop (either before or after another increment of the loop), after the error
> tests or the general data check (since the data has already passed those
> tests)
> or before case 1. I don't think you can say that one of those is
> overwhelmingly
> more likely than another. Nor can you say that a programmer who visualises an
> algorithm in this way is off his scone.

Thanks so much for stating the following:

> So, the software tool (the language)
> should allow him to map these thoughts to code as directly as possible,
> without
> having to re-frame them or translate them into a different concept.
> 

I'd like to see this principle overriding any simplicity based concept in the
design of Euphoria. Quite a few things need to be done to this end.

> The present solutions sometimes have problems. If you want to jump to the
> pre-initialisation
> point you could wrap up the pre-code in a procedure, the loop in a different
> procedure, then call both (the second recursively) from within the
> conditional.
> But this can be awkward if the two retry cases want different parts of the
> precode,
> or if the excised code, removed from context, is meaningless (leading to a
> mysterious
> procedure dissociated from its context), or if it's all just too messy.
> 
> Jumping within a loop is more complicated because a procedure may need to read
> and write substantial local data that has to be passed or globalised. It can
> also be harder to hive off code into a procedure because the desired code is
> in the midst of nested blocks. For example, the desired routine might include
> the 'end if', but not the 'if' (e.g Its natural start is an 'elsif'. In this
> case, you have to break up the select-case flow into pieces).
> 
> In the example, if you want to jump back to the start of the conditional, you
> could simply jump back to the start of the inner loop and redundantly re-run
> code that you know will pass because the data has already passed that way. I
> suspect a lot of us do that to save trouble.
> 
> Flags, or tagging the reformed data, can also be a solution, but it means
> extra
> conditional checks on the majority data to check for a minority cases.
> 
> If someone thinks these solutions are good, they should ask themselves why
> they
> want a 'continue' construct, as the same solutions apply to it.
> 
> Since the problem involves retreats to different spots, things like 'continue'
> can only ever be a partial solution. So after reading all the stuff on
> 'continue',
> I have gone over to the 'jumps within blocks' stable.
> 

If "retry" makes its way into the language (who knows, after all Æ has it), then
you can do
label "retry-it"
while <whatever> do
    <code to jump back to>
    if do_that_again() then
        retry "retry-it"
    end if
-- stuff
end while


> Cheers
> Peter Robinson

CChris

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu