4.9.1. Cycle
Die folgende Funktion definiert ein cycle
Pattern mit den Elementen '(2 1 3 4) und bindet dieses Pattern an das Symbol *testpattern*
.
(defparameter *testpattern* (new cycle :of '(2 1 3 4)))
Daten werden mit der Funktion next
generiert. Wenn die Funktion kein Argument hat, wird pro Funktionsaufruf genau ein Wert gemäß den Regeln des Patterns generiert. Ein cycle
Pattern hat die Eigenschaft, dass die einzelnen Elemente zyklisch ausgelesen werden.
(next *testpattern*) ;; -> 2 (next *testpattern*) ;; -> 1 (next *testpattern*) ;; -> 3 (next *testpattern*) ;; -> 4 (next *testpattern*) ;; -> 2 (next *testpattern*) ;; -> 1 (next *testpattern*) ;; -> 3 (next *testpattern*) ;; -> 4 (next *testpattern*) ;; -> 2
Wird der Funktion next
als 2. Argument der Wahrheitswert T
übergeben, wird eine komplette Periode bis zum Ende der aktuellen Periode als Liste zurückgegeben.
(next *testpattern* t) ;; -> (2 1 3 4) (next *testpattern* t) ;; -> (2 1 3 4) (next *testpattern* t) ;; -> (2 1 3 4)
Eine Zahl als 2. Argument von next
gibt die Anzahl der zu generierenden Daten an:
(next *testpattern* 100) ;; -> (2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 ;; 4 2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 4 2 1 ;; 3 4 2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 4 2 1 3 4)
Pattern sind grundsätzlich unendlich, d.h. die Funktion next
gibt immer einen Wert aus.