Le 12 nov. 08 à 05:48, Carl Sorensen a écrit :

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.


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)))


A more idiomatic way to do it:

ifDefined =
#(define-music-function (parser location sym) (symbol?)
   (let ((music (ly:parser-lookup parser sym)))
     (if (ly:music? music)
         music
         (make-music 'Music 'void #t))))

nicolas



_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to