1) Wozu braucht man überhaupt "pitch-equals?" (der Kommentar hilft mir leider nichtweiter) ? Ich habe es mal probeweise rausgelöscht, das Resultat ist unverändert?!? Assoc wirft mir doch ein (pitch . color) pair aus color-mapping raus, wenn es eines findet, oder? Wenn man dahinter einfach den Aufruf pitch-equals? ohne Parameter schreibt, wieso schmeißt das keinen Fehler? Rätsel über Rätsel...:-)
Das Resultat bleibt in diesem Beispiel gleich, ja. Wie
hier dokumentiert, hat assoc außer nem Schlüssel und ner Alist auch ein drittes
optionales Argument; wird dieses nicht angegeben, wird für die Gleichheitsprüfung equal? verwendet. pitch-equals? testet nur auf Alteration und Notenname, nicht aber auf Oktavlage. Somit wird z. B. jedes C rot eingefärbt. Mit equal? würde nur das eingestrichene c rot und die anderen Cs blieben schwarz; im Beispiel kommen halt keine Töne aus anderen Oktaven vor, deshalb fällts nicht auf.
2) Ist color-notehead sowas wie ein event-hook, nach dem Motto: Wenn ein (in diesem Fall NoteHead) grob erstellt wird, rufe pitch-to-color mit der entsprechenden pitch des zu erstellenden grobs auf?
Fast. Statt NoteHead.color auf einen festen Wert wie #red zu setzen, wird es hier auf eine Funktion gesetzt, die als Argument ein Grob (nämlich besagten NoteHead) bekommt und eine Farbe zurückgibt. Um jetzt an den pitch zu kommen, muss erstmal das NoteEvent herausgefunden werden, welches für den NoteHead verantwortlich ist; dafür gibts die Funktion event-cause.
Ganz kurz sieht also der Ablauf folgendermaßen aus:
NoteHead → Argument „grob“ in color-notehead → verursachendes NoteEvent → pitch → color
statt
NoteHead → color