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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow