Hi, Maarten, Maarten Koopmans wrote: > > ... it responds to a 'rest word, giving you the restof the > block to be evaluated and the value of the last evaluated expression. > > So: eval [ 10 + 10 join "a" "b" rest 20 print "howdy" ] > >> [ "ab" [ 20 print "howdy"]] > > Note that the second item (the rest of the code) is the position in the > original code, so a ' head on that gives you the original code back. >
Sort of like iterating DO/NEXT with an additional check for REST ? > > Question: is this a thing any of you want despite the performance hit of > 400% ? > I pondered doing something with DO/NEXT a while back, but gave up in frustration (I hope you're smarter and/or more patient than I ;-) as I want to be able to write expressions/functions more sophisticated than a single block, but still have interruptability. For example: eval [ foreach line read/lines %somefile [ print line rest ] ] Or interruptableFunction: func [aLine [string!]] [ print aLine doSomethingInteresting aLine rest ] eval [ foreach line read/lines %someOtherFile [ interruptableFunction line ] ] You said "takes a block" so I inferred that things such as the above (nested blocks, including function evaluation) are currently out of reach. Am I too pessimistic? If I have to do all the work of managing e.g. loops and other "control structures", including functions, I think I'd probably want to just go ahead and evert the code into a task object (per the article on REBOLforces) with a STEP method that does some meaningful (but not over long) piece of work and then saves state and returns control. -jn- -- ---------------------------------------------------------------------- Joel Neely joelDOTneelyATfedexDOTcom 901-263-4446 Enron Accountingg in a Nutshell: 1c=$0.01=($0.10)**2=(10c)**2=100c=$1 -- To unsubscribe from this list, just send an email to [EMAIL PROTECTED] with unsubscribe as the subject.