home
manual
quick ref.
packages
index
keywords
examples
PREV UP NEXT Yorick

1.2.4: Loops

Most loops in Yorick programs are implicit; remember that operations between array arguments produce array results. Whenever you write a Yorick program, you should be suspicious of all explicit loops. Always ask yourself whether a clever use of array syntax could have avoided the loop.

To illustrate an appropriate Yorick loop, let's revise q_out to write several values of Q in a single call. Incidentally, this sort of incremental revision of a function is very common in Yorick program development. As you use a function, you notice that the surrounding code is often the same, suggesting a savings if it were incorporated into the function. Again, a careful job leaves all of the previous behavior of q_out intact:

 func q_out(Q, file)
 {
   if (!is_stream(file)) file= create(file);
   n= numberof(Q);
   for (i=1 ; i<=n ; ++i) {
     write, file, "Q= "+pr1(Q(i));
     write, file, "   theta       amplitude";
     write, file, theta, damped_wave(theta,Q(i));
   }
   return file;
 }
 

Two new features here are the numberof function, which returns the length of the array Q, and the array indexing syntax Q(i), which extracts the i-th element of the array Q. If Q is scalar (as it had to be before this latest revision), numberof returns 1, and Q(1) is the same as Q, so scalar Q works as before.

But the most important new feature is the for loop. It says to initialize i to 1, then, as long as i remains less than or equal to n, to execute the loop body, which is a compound of three write statements. Finally, after each pass, the increment expression ++i is executed before the i<=n condition is evaluated. ++i is equivalent to i=i+1; --i means i=i-1.

A loop body may also be a single statement, in which case the curly braces are unecessary. For example, the following lines will write the Q=3, Q=2, and Q=1 curves to the file `q.out', then plot them:

 q_list= [3,2,1]
 q_out, q_list, "q.out"
 fma; for(i=1;i<=3;++i) plg, damped_wave(theta,q_list(i)), theta
 

A for loop with a plg body is the easiest way to overlay a series of curves. After the three simple statement types, for statements see the most frequent direct use from the keyboard.

  • while and do
  • for
  • goto How to break, continue, and goto from a loop body.
  • LLNL Disclaimers