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