Praise: Rev Documentation to the rescue

Jon jbondy at sover.net
Tue Jul 26 19:17:12 EDT 2005


Not from me!  I guess I chose a horribly wrong example!  Point taken!

:)

Jon


Michael J. Lew wrote:

> I dare say this one will get me into trouble...
>
> At 9:36 PM -0500 25/7/05, use-revolution-request at lists.runrev.com wrote:
>
>>
>> For me, the biggest problem I have with the docs, aside from not being
>> able to find things, is that when I get to a topic, there are not enough
>> examples to indicate exactly how a facility might be used.  Whether this
>> belongs in the "docs" or in something else is beside the point.  If I'm
>> struggling with how to use a REPEAT, I need examples.
>
>
> Here is some help with repeat that includes no less than 8 code 
> examples. You can find many, many more examples of how and when to use 
> repeat in almost any Rev project that you care to open and examine. I 
> hope that helps (HTH).
>
> I'm sorry if this post is excessively long. It is Jeanne's fault for 
> writing a long dictionary entry ;-)
>
> From the docs:
> repeat control structure
> Platform support:    Introduced in version 1.0 (Changed in version 2.0)
>
> Executes a set of statements repeatedly.
>
> repeat loopForm
>   statementList
> end repeat
>
> See also: each keyword, end repeat keyword, exit repeat control 
> structure, for keyword, forever keyword, next repeat control 
> structure, until keyword, while keyword, Why does a repeat loop behave 
> strangely?
>
> Description
> Use the repeat control structure to perform the same set of actions 
> for each member of a set: for example, for each card in a stack, or 
> each line in a variable.
>
> Form:
> The repeat control structure always begins with the word "repeat".
>
> The last line of a repeat control structure is the end repeat keyword.
>
> Parameters:
> The loopForm is one of the following forms:
>
>     * forever
>     * until condition
>     * while condition
>     * [for] number times
>     * with counter = startValue [to | down to] endValue [step increment]
>     * for each chunkType labelVariable in container
>     * for each element labelVariable in array
>
> The condition is any expression that evaluates to true or false.
>
> The number, startValue, endValue, and increment are numbers or 
> expressions that evaluate to numbers.
>
> The counter or labelVariable is a legal variable name.
>
> The chunkType is one of character (or char), word, line, item, or token.
>
> The container is any existing container. The array is any existing 
> container that contains an array of values.
>
> The statementList consists of one or more Transcript statements, and 
> can also include if, switch, try, or repeat control structures.
>
> Comments:
> How many times the statementList is executed depends on the loopForm 
> you use.
>
> The forever form:
> The forever form continues repeating the statements in the 
> statementList until an exit, exit repeat, pass, or return statement is 
> executed. Usually, one of these control structures is included in an 
> if control structure within the statementList.
>
> Use the forever form if you want to test a condition at the bottom of 
> the loop, after the statementList is executed. In the following 
> example, the go command is executed at least once, since the 
> mouseClick is not checked until after the go command:
>
>   repeat forever
>     go next card
>     if the mouseClick then exit repeat -- user clicked
>   end repeat
>
> If no loopForm is specified, the forever form is used.
>
> The until and while forms:
> The until condition and while condition forms repeat the statementList 
> as long as the condition is false or as long as it is true, 
> respectively. Revolution re-evaluates the condition before each 
> iteration.
>
> Use the until condition or while condition form if you want to test a 
> condition at the top of the loop, before the statements are executed. 
> This example scrolls through the cards until the user clicks the mouse:
>
>   repeat until the mouseClick
>     go next
>     wait for 100 milliseconds
>   end repeat
>
> The for form:
> The for number times form repeats the statementList for the specified 
> number of times.
>
> The number is evaluated when the loop is first entered, and is not 
> re-evaluated as a result of any actions performed in the 
> statementList. For example, if the number is the number of cards, and 
> the statementList contains a create card command, the loop is executed 
> as many times as there were cards when the loop began, even though the 
> current number of cards is changing with each iteration through the loop.
>
> If the number is not an integer, it is rounded to the nearest integer, 
> using the same rules as the round function.
>
> Use the for number times form if you want to execute the statementList 
> a fixed number of times. The following simple example beeps three times:
>
>   repeat for 3 times
>     beep
>   end repeat
>
> The with form:
> The with counter = startValue to endValue form and the with counter = 
> startValue down to endValue form set the counter to the startValue at 
> the beginning of the loop, and increase (or decrease, if you're using 
> the down to form) the countVariable by 1 each time through the loop. 
> When the counter is greater than or equal to the endValue, (less than 
> or equal to, if you're using the down to form), the loop performs its 
> final iteration and then ends.
>
> If you specify an increment, the increment is added to the counter 
> each time through the loop, rather than the counter being increased by 
> 1. (The increment is not treated as an absolute value: if you're using 
> the down to form, the increment must be negative.)
>
> As with the for number times form described above, the startValue and 
> endValue are evaluated when the loop is first entered, and are not 
> re-evaluated as a result of any actions performed in the statementList.
>
> Use one of these forms if you want to perform an action on each member 
> of a set, and you need to refer to the member by number within the 
> statementList. The following example loops through all the controls on 
> the current card. The counter x is 1 during the first iteration, 2 
> during the second, and so on:
>
>   repeat with x = 1 to the number of controls
>     show control x
>   end repeat
>
> The following example loops backwards through a set of lines. The 
> counter myLine is 20 during the first iteration, 18 during the second, 
> and so on:
>
>   repeat with myLine = 20 down to 1 step -2
>     put myLine
>   end repeat
>
>   Note:  It is possible to change the counter variable in a statement 
> in the loop. However, doing this is not recommended, because it makes 
> the loop logic difficult to follow:
>
>   repeat with x = 1 to 20 -- this loop actually repeats ten times
>     answer x
>     add 1 to x -- not recommended
>   end repeat
>
> The for each form:
> The for each chunkType labelVariable in container form sets the 
> labelVariable to the first chunk of the specified chunkType in the 
> container at the beginning of the loop, then sets it to the next chunk 
> for each iteration. For example, if the chunkType is word, the 
> labelVariable is set to the next word in the container for each 
> iteration of the loop.
>
> Use the for each form if you want to perform an action on each chunk 
> in a container. This form is much faster than the with countVariable = 
> startValue to endValue form when looping through the chunks of a 
> container. The following example changes a return-delimited list to a 
> comma-delimited list:
>
>   repeat for each line thisLine in myList
>     put thisLine & comma after newList
>   end repeat
>   if last char of newList is comma then delete last char of newList
>
> The for each element labelVariable in array form sets the 
> labelVariable to the first element in the array at the beginning of 
> the loop, then sets it to the next element for each iteration.
>
>   Important!  You cannot change the labelVariable in a statement 
> inside the loop. Doing so will cause a script error. You can change 
> the content of the container, but doing so will probably produce 
> unexpected results.
>
> Use the for each form if you want to perform an action on each element 
> in an array. The following example gets only the multi-word entries in 
> an array of phrases:
>
>   repeat for each element thisIndexTerm in listOfTerms
>     if the number of words in thisIndexTerm > 1
>     then put thisIndexTerm & return after multiWordTerms
>   end repeat
>
>   Note:  The repeat control structure is implemented internally as a 
> command and appears in the commandNames.
>
> Changes to Transcript:
> The ability to specify an increment for the repeat with counter = 
> startValue to endValue form was added in version 2.0. In previous 
> versions, this form of the repeat control structure always incremented 
> or decremented the counter by 1 each time through the loop.




More information about the use-livecode mailing list