Универсальный цикл LOOP
(loop
описатель-переменной*
[условие-завершения]
оператор*)
описатель-переменной ::=
- with var1[ = form1] [and var2[ = form2]]...
- Введение и инициализация локальных переменных.
- for var [{from | upfrom | downfrom} form1]
{to | upto | below | downto | above} form2
[by form3]
- Арифметический цикл.
- for var {in | on} form1
[by step-fun]
- Цикл по списку.
- for var across vector
- Цикл по вектору
или строке.
- for var being each hash-key in hash-table
[using (hash-value other-var)]
- Цикл по хэш-таблице.
условие-завершения ::=
while form | until form | repeat form
| always form | never form | thereis form
оператор ::=
- do form...form
- Последовательность форм (тело).
- return результат
- Завершает цикл, возвращая из него значение формы результат.
- {collect | append | nconc} form [into var]
- Накопление списка.
- {count | sum | maximize | minimize form [into var]
- Накопление числа.
- {if | when | unless} p оператор...оператор
[else оператор...оператор] [end]
- Условный оператор.
Пример
(loop for i upfrom 1 to 10
when (oddp i)
collect i)
(1 3 5 7 9)
(mapcar #'funcall
(loop for i below 4
collect (lambda () i)))
(4 4 4 4)