Algorithmische Komposition mit Common Lisp
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)