Buscar..


Sintaxis

  • (do ({var | (var [init-form [step-form]])} *) (end-test-form result-form *) declaración * {etiqueta | declaración} *)
  • (do * ({var | (var [init-form [step-form]])} *) (end-test-form result-form *) declaración * {etiqueta | declaración} *)
  • (dolist (var list-form [result-form]) declaración * {etiqueta | declaración} *)
  • (declaración puntual (var count-form [result-form]) * {tag | statement} *)

dotimes

dotimes es una macro para la iteración de enteros sobre una sola variable desde 0 debajo de algún valor de parámetro. Uno de los ejemplos simples sería:

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

0 
1 
2 
3 
4 
NIL

Tenga en cuenta que NIL es el valor devuelto, ya que nosotros no proporcionamos uno; la variable comienza desde 0 y en todo el bucle se convierte en valores de 0 a N-1. Después del bucle, la variable se convierte en la 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)

lista de tareas

dolist es una macro de bucle creada para recorrer fácilmente las listas. Uno de los usos más simples sería:

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

A 
B 
C 
D 
NIL ; returned value is NIL

Tenga en cuenta que dado que no proporcionamos un valor de retorno, se devuelve NIL (y A, B, C, D se imprimen en *standard-output* ).

dolist también puede devolver valores:

;;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

Bucle simple

La macro de bucle tiene dos formas: la forma "simple" y la forma "extendida". La forma extendida se trata en otro tema de documentación, pero el bucle simple es útil para bucles muy básicos.

La forma de bucle simple toma varias formas y las repite hasta que se sale del bucle usando return o alguna otra salida (por ejemplo, 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow