Циклические операции (в терминологии AWL,
итераторы) способны вычислять свои операнд(ы) многократно. Например, функтор
while(
condition,
loop) реализует логику цикла «с предусловием» (аналогичного оператору
while в
C или
Pascal): повторно перевычисляются условие
condition и тело цикла
loop, пока
condition остается истинным. Набор операций-итераторов в AWL довольно богат: например,
l_loop(
p,
List,
loop) организует последовательный перебор элементов списка
List (присваивая каждый переменной
p, и выполняя тело
loop). Аналогично, выполнение
for_inc(
I,
From..To,
loop) организует перебор всех целых значений в диапазоне от
From до
To (включая
From, но не
To), последовательно присваивая их переменной
I с выполнением тела цикла
loop. Заметим, что не предусмотрено операций явного или неявного перехода, типа
goto,
break или
continue: единственный механизм, позволяющий нарушить жестко заданный порядок выполнения —
исключения (доступные в новых версиях языка). Все итераторы также возвращают значение (обычно, последнее вычисленное значение тела цикла). В AWL значение возвращают даже блоки: т.к. блок — это последовательность вычислений
S1…Sn, в которой значение
Sn является результатом (что позволяет использовать блок как операнд выражения, например). Резюмируя, можно сказать, что в AWL понятия «выполнение» и «вычисление» принципиально не различимы (как и во многих функциональных языках, например в
Nemerle). Всё, что выполняется (выражения, операторы, блоки) всегда возвращает результат (который, конечно, может игнорироваться). Когда явное значение отсутствует, им является пустой список , или
undef (это значение имеют все переменные без инициализации).