send "subCheckNow" to me, or?

Alex Tweedly alex at tweedly.net
Fri Jul 7 18:48:00 EDT 2006


Alex Tweedly wrote:

> You need to be careful (i.e. precise) when you say that :-)
>    send "xxx" to me in N ticks
> is kind of like a (delayed) goto - the message is queues, then the 
> code following the 'send'; statement is executed (so it's not really 
> quite like a GOTO), and when the handler (and any calling handlers) 
> exits, or a "wait with messages or other 'send in time' statement is 
> executed) then the message queue will send the message
>
> On the other hand,
>   send "xxx" to me
> is just not at all like a GOTO. The handler is executed immediately 
> (via the message passing), but THEN the following code is also 
> executed - so it's very like a GOSUB, and therefore very, very like 
> just using the handler name directly; basically the only difference 
> seems to be that it's less efficient.
>
> So if you were doing simply 'send "xxx" to me' then you would still be 
> building up a stack of calls; we can argue semantics whether it is 
> officially called "recursion" or not - but the effect would be that 
> all of these would have context that needs to be kept simultaneously.
>
Hmmm - not easy to follow what I wrote there - try this concrete example 
instead :
The following 3 code samples differ *only* in the recursive call / send 
statement.

> on subCheckNow
>     -- do stuff here
>     if lCounter > 3 then exit subCheckNow
>     add 1 to lCounter
>     put "before" & cr after field "F"
>     send "subCheckNow" to me
>     put "after" & cr after field "F"  
> end subCheckNow

and ALSO

> on subCheckNow
>     -- do stuff here
>     if lCounter > 3 then exit subCheckNow
>     add 1 to lCounter
>     put "before" & cr after field "F"
>     subCheckNow
>     put "after" & cr after field "F"  
> end subCheckNow


BOTH produce

> before
> before
> before
> before
> after
> after
> after
> after


But in contrast,

> on subCheckNow
>     -- do stuff here
>     if lCounter > 3 then exit subCheckNow
>     add 1 to lCounter
>     put "before" & cr after field "F"
>     send "subCheckNow" to me in 1 tick
>     put "after" & cr after field "F"  
> end subCheckNow

produces

> before
> after
> before
> after
> before
> after
> before
> after


-- 
Alex Tweedly       http://www.tweedly.net



-- 
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.394 / Virus Database: 268.9.9/382 - Release Date: 04/07/2006




More information about the use-livecode mailing list