Johan Vromans <jvromans <at> squirrel.nl> writes: > > Stupic question, I assume... > > In a scheme function I have a symbol that is the name of a lilypond > expression. How can I get its music value? > > E.g. > > ifDefined = > #(define-music-function > (parser location sym) > (symbol?) > > (if (defined? sym) > ??? return the value of the expression ??? > (make-music 'SequentialMusic 'void #t))) > > So I can write: > > \ifDefined #'myNotes > > and have it expand to myNotes (if defined), or a void music expression > otherwise. >
You need to use the procedure primitive-eval to evaluate a symbol (if (defined? sym) (primitive-eval sym) (make-music 'SequentialMusic 'void #t)) should do the trick. Here's some test code that worked for me: %%% Start of test code \version "2.11.64" ifDefined = #(define-music-function (parser location sym) (symbol?) " Return the music if @code{sym} is defined, and void if not" (if (defined? sym) (primitive-eval sym) (make-music 'SequentialMusic 'void #t))) myNotes = \relative c' { f4 g a b } { \ifDefined #'myNotes \ifDefined #'undefinedNotes } %%% End of test code HTH, Carl _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-user