Поиск…


Синтаксис

  • (do ({var | (var [init-form [step-form]])} *) (end-test-form result-form *) Объявление * {tag | statement} *)
  • (do * ({var | (var [init-form [step-form]])} *) (end-test-form result-form *) Объявление * {tag | statement} *)
  • (объявление dolist (var list-form [result-form]) * {tag | statement} *)
  • (dotimes (var count-form [result-form]) декларация * {tag | statement} *)

DOTIMES

dotimes - это макрос для целочисленной итерации по одной переменной от 0 ниже некоторого значения параметра. Один из примеров:

CL-USER> (dotimes (i 5)
           (print i))

0 
1 
2 
3 
4 
NIL

Обратите внимание, что NIL - это возвращаемое значение, так как мы сами не предоставили его; переменная начинается с 0 и по всему циклу становится значениями от 0 до N-1. После цикла переменная становится N:

CL-USER> (dotimes (i 5 i))
5

CL-USER> (defun 0-to-n (n)
           (let ((list ()))
             (dotimes (i n (nreverse list))
               (push i list))))
0-TO-N
CL-USER> (0-to-n 5)
(0 1 2 3 4)

DOLIST

dolist - это dolist макрос, созданный для простой dolist списков. Одним из самых простых применений было бы:

CL-USER> (dolist (item '(a b c d))
           (print item))

A 
B 
C 
D 
NIL ; returned value is NIL

Обратите внимание, что поскольку мы не предоставили возвращаемое значение, возвращается NIL (а A, B, C, D печатаются на *standard-output* ).

dolist также может возвращать значения:

;;This may not be the most readable summing function.
(defun sum-list (list)
  (let ((sum 0))
    (dolist (var list sum)
      (incf sum var))))

CL-USER> (sum-list (list 2 3 4))
9

Простая петля

Макрос цикла имеет две формы: «простую» форму и «расширенную» форму. Расширенная форма рассматривается в другом разделе документации, но простой цикл полезен для очень простого цикла.

Простая форма цикла принимает несколько форм и повторяет их до тех пор, пока цикл не будет завершен с использованием возврата или какого-либо другого выхода (например, throw ).

(let ((x 0))
  (loop
     (print x)
     (incf x)
     (unless (< x 5)
       (return))))

0 
1 
2 
3 
4 
NIL


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow