Damit ist der Grammatikrahmen vollständig. Der Rest des Programms ist für die Generierung des Themas, die Variation des Themas und die Auswahl der konkreten Töne zuständig. "variante" berechnet eine Variation des Themas, "finde_noten" setzt Töne aus der entsprechenden Skala ein, "akkord" generiert die Akkorde. Im Detail kann auf diese Programmteile hier nicht eingegangen werden, da das komplette Listing den Rahmen des Beitrags völlig sprengen würde.
(define thema) !
(thema {|melodie:{|takt1:{|L:*l1 R:*r1|} takt2:{|L:*l2 R:*r2|}|} bass: {|takt1:{|L:*lb1 R:*rb1|} takt2:{|L:*lb2 R:*rb2|}|} akkord: {|takt1:{|L:[[1/2 0]] R:[[1/2 0]]|} takt2:{|L:[[1/2 0]] R:[[1/2 0]]|}|}|}) <- (random *nm1 5) (random *nm2 5) (bilde_variante melodie 2 100 [[1 *nm1] [1 *nm2]] *t0) (bilde_variante melodie 2 100 *t0 *t3) (bilde_variante melodie 2 100 *t3 *p)
(random *nb 5) (bilde_variante bass 2 100 [[1 0] [1 *nb]] *pbx) (bilde_variante bass 2 100 *pbx *pb)
(htakt *pb *pb1 1/2 *lb1) (htakt *pb1 *pb2 1/2 *rb1) (htakt *pb2 *pb3 1/2 *lb2) (htakt *pb3 *pb4 1/2 *rb2) (htakt *p *p1 1/2 *l1) (htakt *p1 *p2 1/2 *r1) (htakt *p2 *p3 1/2 *l2) (htakt *p3 *p4 1/2 *r2) .
Variationsregeln:
(variiere_melodie2 #[0 80) *d *1 *t=#[1/8 8] *t2 *n1 *n2 [[*t2 *n1] [*t2 *n2] |