Ключевое слово L/loop



11l поддерживает 5 форм циклов.


1. Бесконечный цикл.


L
   print("\a")
   sleep(1)


2. Цикл "while".


L <условие>
   ...

Тело цикла выполняется/повторяется до тех пор, пока заданное условие истинно (равно 1В).

Примечание: если
<условие>
представлено единственным идентификатором, например:
L ok {...}
, тогда соблаговолите писать так:
L ok == 1B {...}
.


3. Повтор тела цикла заданное количество раз.


L <число>
   ...

Пример:
L 3
   print("ABC")
выведет
"ABC"
3 раза.

Примечание: только целочисленные константы принимаются в качестве
<число>
на данный момент {}.


4. Цикл "for in".


L(<переменная>) <итерируемое выражение>
   ...

Примеры:
L(x) 1..10 {print(x)}
выведет числа от
1
до
10
включительно.
L(c) "str" {print(c)}
выведет
"s"
,
"t"
и
"r"
.
L(n) [9,7] {print(n)}
выведет
9
и
7
.
L(k, v) [‘k’ = 1] {print(k‘=’v)}
выведет
k=1
.

Если необходимо изменять элементы итерируемого контейнера, тогда поставьте
&
перед
<переменная>
:
V arr = [1, 2, 3]
L(&el) arr
   el++
print(arr) // выведет `[2, 3, 4]`

Редко используемые возможности


5. Цикл по диапазону.


L <диапазон>
   ...

Примеры:
L 1..n {print("ABC")}
выведет
"ABC"
n раз.
L 0.<n {print("ABC")}
выведет
"ABC"
n раз.


Ключевые подслова L/loop



Инструкция
L.break
/
loop.break
прерывает выполнение текущего цикла.
У вас может возникнуть потребность имея несколько вложенных циклов указать какой из них следует прервать. По умолчанию
L.break
/
loop.break
прерывает самый внутренний цикл. Если вам необходимо прервать не самый внутренний цикл, тогда просто укажите какой именно цикл необходимо прервать:
L(y) 0..10
   L(x) 0..10
      I a[y][x] == 1
         L(y).break // прерывает внешний цикл по `y`
Также можно использовать
^L.break
,
^^L.break
и т.д.


Инструкция
L.continue
/
loop.continue
прерывает выполнение текущей итерации текущего цикла, и продолжает его выполнение на следующей итерации.


Инструкция
L.remove_current_element_and_continue
удаляет текущий элемент итерируемого контейнера. Например, этот код удаляет все чётные числа в
array
:
L(i) array
   I i % 2 == 0
      L.remove_current_element_and_continue


Код под
L.was_no_break
/
loop.was_no_break
выполняется только когда цикл успешно завершился без вызова
L.break
/
loop.break
(аналогично else в Python):
L(test) tests
   I !test.ok()
      L.break

L.was_no_break
   print(‘All tests are ok!’)


L.index
/
loop.index
можно использовать для получения индекса (номера начиная с 0) текущей итерации цикла.


L.first_iteration
/
loop.first_iteration
является истиной (1B) на первой итерации цикла.

L.last_iteration
/
loop.last_iteration
является истиной (1B), если ‘текущий элемент итерируемого контейнера последний’/‘текущая итерация цикла последняя’.


L.prev
/
loop.prev
и
L.next
/
loop.next
на данный момент не поддерживаются.