On 17/02/2015 13:25, Dave Cragg wrote:
Alex,

Thanks for that.

Disbelieving soul that I am (sorry), I puzzled for a while over the results of 
these two versions.

...
I had to use a pencil and paper to track what was in t and what the engine was referring to after 
the "x" and "y" inserts. Then it became clear.

I feel a better person.
pencil and paper is good for your soul :-)
Though it would be kinda cool to do a quick LC simulation showing visible "animation" of the variable and index as it goes through the loop. That's top of my list for what to do the next time I have to go on a long train journey ....

-- Alex.


Cheers
Dave



On 16 Feb 2015, at 23:08, Alex Tweedly <a...@tweedly.net> wrote:
That's not quite correct. It doesn't do a single initial complete scan of the 
whole variable and keep all the pointers. What it does is (more like) keep 
track of how far it has currently processed, and then when it needs the next 
line, it scans from that remembered position forward until the next CR - and 
then remembers that as the current position.  (Oh, and btw, it does remember 
how many chars were in the initial value, and uses that).

The fact that it does incremental scan rather than one initial scan can be seen 
from the following (totally useless :-) bit of code :

on mouseup
   put "abc" & CR & "def" & CR & "ghi" & CR into t
   repeat for each line L in t
      put the number of chars in L && L &CR after msg
      if L = "abc" then
         put "x" into line 2 of t
         put "qwert" after line 3 of t
      end if
   end repeat
end mouseup

An initial scan would have produced  :
3 abc
3 x
g
3 ijq

But we actually get:
3 abc
1 x
6 ghiqwe

It is significant that it doesn't do a complete scan, because that would be a 
cost penalty at the start of the loop, and so could make it unnecessarily 
expensive to do some operations. Again that can be seen from the following 
(take out of context) snippet of not quite real code ....

put "millions and millions of lines of data" into tVar
repeat for each line L in tvar
   if some condition then exit repeat
end repeat

If there were an initial scan, then you would do that whole costly scan even 
though you could actually exit the loop very early; because it's an incremental 
scan, you don't need to worry about that (so long as you are sure you will exit 
soon).

-- Alex.

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode


_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to