\meinTest liefert einen Fehler, wahrscheinlich bzw. sicher habe ich falsch geklammert […]
Ja, hast du. Die Fehlermeldung sagt zu Zeile 42 „Missing expression in (let ((m1 (make-sequential-music (list m)))))“. Und da hast dus: fünf Klammern auf, fünf zu, der let-Ausdruck ist zu, obwohl er noch nicht fertig ist/sein soll. Je nach Texteditor (z. B. in Frescobaldi) kann man eine solche falsche Klammerung an der Einrückung erkennen. So wäre richtig geklammert:
meinTest=
#(define-music-function (music)
(ly:music?)
(map
(lambda (m)
(let ((m1 (make-sequential-music (list m))))
(#{
{ $m1 }
#})))
(make-a-list-all-chords-from-music music)))Hier ist wie gesagt das Problem, dass du deine Musikfunktion nicht einen Musikausdruck, sondern eine Liste zurückgibt, deshalb wiederhole ich meine Frage: Was willst du genau erreichen, was soll \meinTest \myMusik zurückgeben?
Davon abgesehen lässt sich das ganze noch weit vereinfachen zu:
meinTest=
#(define-music-function (music)
(ly:music?)
(map
(lambda (m)
(make-sequential-music (list m)))
(make-a-list-all-chords-from-music music)))Funktioniert natürlich immer noch nicht, dürfte aber das sein, was du meintest:
Bei
( #{ { $m1 } #} ) sind die äußeren Klammern falsch/zu viel, die inneren geschweiften vermutlich überflüssig (du willst doch nicht nochmal alles in SequentialMusic schachteln, oder?). Statt
#{ $m1 #} kannst du aber auch gleich
m1 schreiben. Weiter gehts mit dem let-Ausdruck: statt
(let ((x BLA)) x) geht doch genauso gut einfach
BLA. Somit ergibt sich obiger Code

Edit: Ich glaub, ich hab inzwischen ne Ahnung, was du mit dem map vorhattest, mir kam es nämlich spanisch vor, dass du im map aus den einzelnen Listenelementen jeweils einelementige Listen erstellst und auf die jeweils make-sequential-music raufschmeißt. Wolltest du vielleicht diese Funktion einfach auf die ganze Liste schmeißen?
meinTest=
#(define-music-function (music)
(ly:music?)
(make-sequential-music (make-a-list-all-chords-from-music music)))
\meinTest \myMusikAls Analogie, um meine Denkweise zu veranschaulichen, nehmen wir das mal als Sortierfunktion: '(4 3 5 2) soll sortiert werden. Du hast nun per map aus jedem Listenelement eine einelementige Liste gemacht und die jeweils sortiert, ergibt '((4) (3) (5) (2)). Stattdessen wärs viel einfacher: die Sortierfunktion auf die ganze Liste anwenden, ergibt '(2 3 4 5). Ist meine Glaskugelvermutung richtig?
