null? ist (so wie ich das verstehe) kein richtiges Typprädikat, sondern gibt zurück, ob eine Liste leer ist. Es hat also nichts mit void und auch nicht mit null-Pointern (bekannt aus anderen Sprachen wie C/C++ oder Java) zu tun.
Hier die Dokumentation.Ein Symbol ist so eine Art Name, der nicht aufgelöst wird, geschrieben als
'name (mit '). In LilyPond werden z. B. grob properties so erreicht:
(ly:grob-set-property! meingrob 'color blue)Der Vorteil gegenüber Strings ist die bessere Vergleichbarkeit, weil jedes Symbol nur einmal im Speicher liegt (anders als mehrere verschiedene Strings mit gleichem Inhalt).
Hier die Dokumentation, die das noch viel ausführlicher erklärt.ly:event? ist ein PostEvent, z. B.
#{ -. #} (ArticulationEvent als Staccato). Man kann nicht nur Musikfunktionen schreiben (per define-music-function), die ly:music? zurückgeben, sondern eben auch Eventfunktionen (z. B. eine Funktion
pizz, die ein TextScript setzt und per
c\pizz aufgerufen wird).
ly:moment? ist ein Zeitpunkt (manchmal auch eine Zeitdauer, weshalb ich nicht ganz versteh, wozu es
ly:duration gibt). So sind z. B.
measureLength und
measurePosition beide vom Typ
ly:moment?.
Ne ausführlichere Dokumentation hab ich bisher auch nicht gefunden. Für die Scheme-eigenen Datentypen kann man halt in die oben verlinkte Dokumentation schauen, LilyPond-Datentypen hab ich einfach irgendwie mit der Zeit kennengelernt. (Mir ist aber z. B. immer noch nicht klar, was ein ly:prob? ist …)