4.9.3. Weighting
Für das Generieren von Zufallszahlen existiert die Patternklasse weighting. Wenn in dem Pattern lediglich Elemente aufgeführt werden, so werden Zufallsfolgen mit gleicher Gewichtung der Elemente erzeugt.
(next (new weighting :of '(1 2 3 4)) 20) (3 2 2 4 4 4 2 2 2 3 2 3 1 3 3 3 1 2 1 4)
Um die Elemente zu gewichten, verwendet man an Stelle der Elemente Listen, deren ersten Position das Element und im Rest der Liste das Keywort :weight
und das relative Gewicht dieses Elementes aufgeführt wird. Der Defaultwert für :weight
ist 1. Im folgenden Ausdruck erscheint also die 1 im Durchschnitt doppelt so häufig, wie die anderen Elemente des Pattern.
(next (new weighting :of '((1 :weight 2) 2 3 4)) 20) ;; -> (4 1 1 1 1 2 1 2 2 3 3 4 2 3 3 2 2 1 4 2)
Das Keyworte :max
und :min
beziehen sich auf die Anzahl direkter Wiederholung eines Elementes aus einer Zufallsfolge:
(next (new weighting :of '((1 :max 1) (2 :min 2) 3 4)) 20) ;; -> (3 4 2 2 3 3 4 1 3 4 4 3 1 3 3 1 2 2 4 2) ;;; Zufallsfolge mit gleicher Gewichtung aller Elemente ohne direkte ;;; Wiederholung eines Elements: (next (new weighting :of '((1 :max 1) (2 :max 1) (3 :max 1) (4 :max 1))) 20) ;; -> (3 2 3 4 3 1 4 2 1 4 1 3 1 3 4 2 1 4 1 2)