Ricerca…


Sintassi

  • (do ({var | (var [init-form [step-form]])} *) (end-test-form result-form *) dichiarazione * {tag | istruzione} *)
  • (do * ({var | (var [init-form [step-form]])} *) (end-test-form result-form *) dichiarazione * {tag | istruzione} *)
  • (dichiarazione dolist (var list-form [result-form]) * {tag | statement} *)
  • (dotimes (var count-form [result-form]) dichiarazione * {tag | istruzione} *)

dotimes

dotimes è una macro per l' dotimes intera su una singola variabile da 0 al di sotto del valore di un parametro. Uno degli esempi semplici sarebbe:

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

0 
1 
2 
3 
4 
NIL

Si noti che NIL è il valore restituito, poiché non ne abbiamo fornito uno; la variabile inizia da 0 e in tutto il loop diventa valori da 0 a N-1. Dopo il ciclo, la variabile diventa 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 è una macro in loop creata per scorrere facilmente gli elenchi. Uno degli usi più semplici sarebbe:

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

A 
B 
C 
D 
NIL ; returned value is NIL

Si noti che poiché non abbiamo fornito il valore di ritorno, viene restituito NIL (e A, B, C, D vengono stampati su *standard-output* ).

dolist può anche restituire valori:

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

Ciclo semplice

La macro del ciclo ha due forme: la forma "semplice" e la forma "estesa". La forma estesa è trattata in un altro argomento di documentazione, ma il ciclo semplice è utile per il ciclo di base.

Il semplice modulo di loop prende un numero di moduli e li ripete fino a quando il ciclo non viene terminato utilizzando return o qualche altra exit (ad es. 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow