Next: Heap , Previous: Line , Up: Patterns , Home: Allgemeine Einführung

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)