common-lisp
Grundschleifen
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