common-lisp
Podstawowe pętle
Szukaj…
Składnia
- (do ({var | (var [init-form [step-form]])} *) (end-test-formula-wynik-formularz *) deklaracja * {tag | instrukcja} *)
- (do * ({var | (var [init-form [step-form]])} *) (end-test-form wynik-formularz *) deklaracja * {tag | instrukcja} *)
- (dolist (var list-form [wynik-formularz]) deklaracja * {tag | instrukcja} *)
- (dotimes (var count-form [wynik-formularz]) deklaracja * {tag | instrukcja} *)
dotimes
dotimes
to makro do iteracji liczb całkowitych na pojedynczej zmiennej od 0 poniżej pewnej wartości parametru. Jednym z przykładów może być:
CL-USER> (dotimes (i 5)
(print i))
0
1
2
3
4
NIL
Zauważ, że NIL
jest wartością zwracaną, ponieważ sami jej nie podaliśmy; zmienna zaczyna się od 0 i w całej pętli staje się wartością od 0 do N-1. Po pętli zmienna staje się 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)
zrobić listę
dolist
to zapętlone makro utworzone w celu łatwego przeglądania list. Jednym z najprostszych zastosowań byłoby:
CL-USER> (dolist (item '(a b c d))
(print item))
A
B
C
D
NIL ; returned value is NIL
Zauważ, że ponieważ nie podaliśmy wartości zwracanej, zwracany jest NIL
(a A, B, C, D są drukowane na *standard-output*
).
dolist
może również zwracać wartości:
;;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
Prosta pętla
Makro pętli ma dwie formy: formę „prostą” i formę „rozszerzoną”. Rozszerzona forma jest omówiona w innym temacie dokumentacji, ale prosta pętla jest przydatna w bardzo podstawowej pętli.
Prosta forma pętli przyjmuje wiele form i powtarza je, dopóki pętla nie zostanie zakończona przy użyciu return lub innego wyjścia (np. Rzut ).
(let ((x 0))
(loop
(print x)
(incf x)
(unless (< x 5)
(return))))
0
1
2
3
4
NIL