Suche…


Syntax

  • (do ({var | (var [init-form [step-form]]))} *) (end-testform Ergebnisformular *) Deklaration * {Tag | Anweisung} *)
  • (do * ({var | (var [init-form [step-form]]))} *) (end-testform Ergebnisformular *) Deklaration * {Tag | Anweisung} *)
  • (dolist (var list-form [result-form]) deklaration * {tag | anweisung} *)
  • (dotimes (var count-form [result-form]) Deklaration * {Tag | Anweisung} *)

dotimes

dotimes ist ein Makro für die Integer-Iteration über eine einzelne Variable von 0 unter einem Parameterwert. Ein einfaches Beispiel wäre:

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

0 
1 
2 
3 
4 
NIL

Beachten Sie, dass NIL der Rückgabewert ist, da wir selbst keinen Wert angegeben haben. Die Variable beginnt bei 0 und wird während der gesamten Schleife zu Werten von 0 bis N-1. Nach der Schleife wird die Variable zum 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 ist ein Schleifenmakro, das erstellt wurde, um die Listen leicht durchlaufen zu können. Eine der einfachsten Anwendungen wäre:

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

A 
B 
C 
D 
NIL ; returned value is NIL

Da wir keinen Rückgabewert angegeben haben, wird NIL zurückgegeben (und A, B, C, D werden auf *standard-output* gedruckt).

dolist kann auch Werte zurückgeben:

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

Einfache Schleife

Das Schleifenmakro hat zwei Formen: die "einfache" Form und die "erweiterte" Form. Das erweiterte Formular wird in einem anderen Dokumentationsthema behandelt. Die einfache Schleife ist jedoch für sehr einfache Schleifen nützlich.

Die einfache Schleifenform nimmt mehrere Formen an und wiederholt sie, bis die Schleife mit return oder einem anderen Exit (z. B. throw ) beendet wird.

(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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow