Hallo!
Das folgende Beispiel definiert eine Funktion SillyFunc, die ein Argument vom Typ string? verarbeitet:
SillyFunc =
#(define-music-function
(Silly)
(string?)
#{
#Silly
#})
\relative c''' {
c4 b a b
\SillyFunc "c f c"
\SillyFunc #"c f c"
}
Das Problem ist:
Sowohl der Aufruf \SillyFunc "c f c" als auch der Aufruf \SillyFunc #"c f c" führt auf dem Terminal zu einer Fehlermeldung:
GNU LilyPond 2.18.2
»doof.ly« wird verarbeitet
Analysieren.../usr/share/lilypond/2.18.2/scm/ly-syntax-constructors.scm:56:23: In expression (apply (ly:music-function-extract fun) parser ...):
/usr/share/lilypond/2.18.2/scm/ly-syntax-constructors.scm:56:23: Wrong number of arguments to #<procedure #f (Silly)>
Was mache ich falsch?
Wie ruft man eine Musikfunktion mit String-Argument auf?
Hallo,
wenn Du wirklich noch 2.18.2 verwendest, müssen die default-Argumente parser und location genannt werden, erst in späteren Versionen können diese weggelassen werden.
Also
\version "2.18.2"
SillyFunc =
#(define-music-function (parser location Silly) (string?)
...)
Allerdings gibt diese music-function keine Musik aus - ich geh mal davon aus, daß das dem minimal-example geschuldet ist.
Gruß,
Harm
Harm schrieb:
Zitat von: harm6 am Dienstag, 6. Juli 2021, 10:48
wenn Du wirklich noch 2.18.2 verwendest, müssen die default-Argumente parser und location genannt werden, erst in späteren Versionen können diese weggelassen werden.
Vielen herzlichen Dank, Harm!
Manchmal verzweifle ich an mir selbst. :(
Hätte selber merken müssen, dass es sich um 2.18.2 handelt!
Steht in der Fehlermeldung ja groß und breit da.
Und in der Doku zu 2.18 unter https://lilypond.org/doc/v2.18/Documentation/notation/substitution-function-syntax (https://lilypond.org/doc/v2.18/Documentation/notation/substitution-function-syntax) steht sogar riesengroß unüberlesbar
parser location drin:
Funktion =
#(define-music-function
(parser location Arg1 Arg2 ...)
(Typ1? Typ2? ...)
#{
...Noten...
#})
Bloß ich hab mal wieder nicht gerafft, dass es, wenn man eine Anleitung über Google sucht, auch auf die richtige Versionsnummer ankommt. :-[
Damit, dass die Funktion keine Musik ausgibt, hast Du recht. Aber damit, dass das dem Minimalbeispiel geschuldet sei, nicht. Es liegt eher an meiner Blödheit - ich bin nämlich noch dabei, mich einzulernen und spiele mit lilypond vielleicht seit zwei Wochen herum.
Ich hab jetzt den Argumententyp auf
ly:music? geändert.