common-lisp
Basic loops
Zoeken…
Syntaxis
- (do ({var | (var [init-form [step-form]])} *) (eind-test-formulier resultaat-formulier *) verklaring * {tag | statement} *)
- (do * ({var | (var [init-form [step-form]])} *) (eind-test-formulier resultaat-formulier *) verklaring * {tag | statement} *)
- (dolist (var list-form [result-form]) verklaring * {tag | statement} *)
- (dotimes (var count-form [result-form]) verklaring * {tag | statement} *)
dotimes
dotimes
is een macro voor gehele getallen iteratie over een enkele variabele van 0 onder een parameterwaarde. Een van de voorbeelden van eenvoud zou zijn:
CL-USER> (dotimes (i 5)
(print i))
0
1
2
3
4
NIL
Merk op dat NIL
de geretourneerde waarde is, omdat we er zelf geen hebben opgegeven; de variabele begint bij 0 en wordt gedurende de lus waarden van 0 tot N-1. Na de lus wordt de variabele de 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
is een lus-macro gemaakt om gemakkelijk door de lijsten te dolist
. Een van de eenvoudigste toepassingen zou zijn:
CL-USER> (dolist (item '(a b c d))
(print item))
A
B
C
D
NIL ; returned value is NIL
Aangezien we geen retourwaarde hebben NIL
, wordt NIL
geretourneerd (en A, B, C, D worden afgedrukt naar *standard-output*
).
dolist
kan ook waarden retourneren:
;;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
Eenvoudige lus
De lusmacro heeft twee vormen: de "eenvoudige" vorm en de "uitgebreide" vorm. Het uitgebreide formulier wordt behandeld in een ander documentatieonderwerp, maar de eenvoudige lus is nuttig voor een zeer eenvoudige lus.
De eenvoudige lusvorm neemt een aantal vormen aan en herhaalt deze totdat de lus wordt verlaten met behulp van return of een andere uitgang (bijv. Gooien ).
(let ((x 0))
(loop
(print x)
(incf x)
(unless (< x 5)
(return))))
0
1
2
3
4
NIL