Eric Knapp <ekn...@gmail.com> writes: > I'm learning more Scheme. (I think I'll be learning Scheme for a > while.) I'm looking at the sample file scheme-engraver.ly and I have a > few questions. I think I'm understanding the structure of the Scheme, > it appears to be a list of Scheme pairs. Each pair (cons) has a symbol > that starts with an apostrophe and a lambda function or a list of more > pairs of lambda functions. I'm familiar with symbols in Ruby and I'm > assuming they are similar in Scheme. The pairs correspond to a method > or macro in a C++ engraver class. Examples would be: > > C++: virtual void initialize () > Scheme: (cons 'initialize (lambda (trans)...)) > > C++: IMPLEMENT_TRANSLATOR_LISTENER (Engraver_name, event_name) > Scheme: (cons 'listeners (list (cons 'rest-event ...))) > > C++: DECLARE_ACKNOWLEDGER (note_head) > Scheme: (cons 'acknowledgers (list (cons 'note-head-interface ...))) > > Am I on the right track up to this point?
I find that syntax tiresome to read. It requires evaluation and thus does not have a close correspondence to print syntax. That's partly because of the way the Scheme engraver example has been written. I'd much prefer it to use backquote syntax, such as diff --git a/input/regression/scheme-engraver.ly b/input/regression/scheme-engraver.ly index ae87b10..68b3443 100644 --- a/input/regression/scheme-engraver.ly +++ b/input/regression/scheme-engraver.ly @@ -11,62 +11,53 @@ \context { \Voice \consists - #(list - (cons 'initialize - (lambda (trans) - (display (list "initialize" - (ly:context-current-moment - (ly:translator-context trans)) "\n")))) - (cons 'start-translation-timestep - (lambda (trans) - (display (list "start-trans" - (ly:context-current-moment - (ly:translator-context trans)) "\n")))) - (cons 'listeners - (list - (cons 'rest-event (lambda (engraver event) - (let* - ((x (ly:engraver-make-grob engraver 'TextScript event))) - (display (list "caught event" event "\ncreate:\n" x "\n")) - (ly:grob-set-property! x 'text "hi")) - )) - )) - (cons 'acknowledgers - (list - (cons 'note-head-interface - (lambda (engraver grob source-engraver) - (display (list "saw head: " grob " coming from " source-engraver)) - )) - )) - (cons 'end-acknowledgers - (list - (cons 'beam-interface - (lambda (engraver grob source-engraver) - (display (list "saw end of beam: " grob " coming from " source-engraver)) - )) - )) - (cons 'process-music - (lambda (trans) - (display (list "process-music" - (ly:context-current-moment - (ly:translator-context trans)) "\n")))) - (cons 'process-acknowledged - (lambda (trans) - (display (list "process-acknowledged" - (ly:context-current-moment - (ly:translator-context trans)) "\n")))) - (cons 'stop-translation-timestep - (lambda (trans) - (display (list "stop-trans" - (ly:context-current-moment - (ly:translator-context trans)) "\n")))) - (cons 'finalize - (lambda (trans) - (display (list "finalize" - (ly:context-current-moment - (ly:translator-context trans)) "\n")))) - ) - + #`((initialize . + ,(lambda (trans) + (display (list "initialize" + (ly:context-current-moment + (ly:translator-context trans)) "\n")))) + (start-translation-timestep . + ,(lambda (trans) + (display (list "start-trans" + (ly:context-current-moment + (ly:translator-context trans)) "\n")))) + (listeners + (rest-event . ,(lambda (engraver event) + (let* + ((x (ly:engraver-make-grob engraver 'TextScript event))) + (display (list "caught event" event "\ncreate:\n" x "\n")) + (ly:grob-set-property! x 'text "hi")) + ))) + (acknowledgers + (note-head-interface . + ,(lambda (engraver grob source-engraver) + (display (list "saw head: " grob " coming from " source-engraver)) + ))) + (end-acknowledgers + (beam-interface . + ,(lambda (engraver grob source-engraver) + (display (list "saw end of beam: " grob " coming from " source-engraver)) + ))) + (process-music . + ,(lambda (trans) + (display (list "process-music" + (ly:context-current-moment + (ly:translator-context trans)) "\n")))) + (process-acknowledged . + ,(lambda (trans) + (display (list "process-acknowledged" + (ly:context-current-moment + (ly:translator-context trans)) "\n")))) + (stop-translation-timestep . + ,(lambda (trans) + (display (list "stop-trans" + (ly:context-current-moment + (ly:translator-context trans)) "\n")))) + (finalize . + ,(lambda (trans) + (display (list "finalize" + (ly:context-current-moment + (ly:translator-context trans)) "\n"))))) }} -- David Kastrup _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-devel