common-lisp                
            Grundläggande öglor
        
        
            
    Sök…
Syntax
- (do ({var | (var [init-form [steg-form]])} *) (slut-test-form resultat-form *) förklaring * {tag | uttalande} *)
- (do * ({var | (var [init-form [steg-form]])} *) (slut-test-form resultat-form *) förklaring * {tag | uttalande} *)
- (dolist (var list-form [result-form]) deklaration * {tag | statement} *)
- (dotimes (var count-form [result-form]) deklaration * {tag | statement} *)
dotimes
 dotimes är ett makro för heltal-iteration över en enda variabel från 0 under något parametervärde. Ett av de enkla exemplen skulle vara: 
CL-USER> (dotimes (i 5)
           (print i))
0 
1 
2 
3 
4 
NIL
 Observera att NIL är det returnerade värdet, eftersom vi inte tillhandahöll ett sådant; variabeln börjar från 0 och genom hela slingan blir värden från 0 till N-1. Efter slingan blir variabeln 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 är ett loopingmakro som skapas för att enkelt gå igenom listorna. En av de enklaste användningarna skulle vara: 
CL-USER> (dolist (item '(a b c d))
           (print item))
A 
B 
C 
D 
NIL ; returned value is NIL
 Observera att eftersom vi inte angav returvärde returneras NIL (och A, B, C, D skrivs ut till *standard-output* ). 
 dolist kan också returnera värden: 
;;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
Enkel slinga
Loop- makroen har två former: den "enkla" formen och den "utökade" formen. Det utökade formuläret behandlas i ett annat dokumentationsämne, men den enkla slingan är användbar för mycket grundläggande slinga.
Den enkla slingformen tar ett antal former och upprepar dem tills slingan avslutas med retur eller någon annan utgång (t.ex. kast ).
(let ((x 0))
  (loop
     (print x)
     (incf x)
     (unless (< x 5)
       (return))))
0 
1 
2 
3 
4 
NIL