Hello David,

sorry for this kind-a-basic-scheme-question(s) ... ;-)
How do I inject variables into an empty module?

I assume, the string-eval approach loads up the whole guile-tool-chain, so that define is defined.
The function I am thinking of shall work like this:

<pseudo-snip>
#(define-public (set-book-headers! book header) ; book is a book, header is an a-list, containig all vars to inject into header
  (let ((bookhead (ly:book-header book)))
       ; if book has no header, create one
       (if (not bookhead) (let ((bh (/make-module/)))
                (set! bookhead bh)
                (ly:book-set-header! bookhead)
       ))
       (for-each (lambda (p)
                         (if (pair? p)
                             (let ((key (car p))
                                   (val (cdr p)))
                                  (/inject key=val/ bookhead))))
                 header)
))
</pseudo-snip>

So AFAICS there are at least 3 different ways to create a module to use in a header:
1: (eval-string "(define-module (a b))")
2: (ly:book-header #{ \book { \header { } } #})
3: (make-module)

The first two are some kind of cheating, but create modules, where I can inject my vars using
(eval `(define ,key (quote ,val)) bookhead)

I would prefer the 3rd one, if I knew, how to inject the vars inside the empty module. In my first post, regarding this stuff, I used eval-string, because I assume it produces less overhead than creating a book in inline lily-code. My function shall modify the given book and not create a new one, so that the change is visible outside the function-scope. Of course, one might return the changed/copied book and use that for processing, but I still like to know the answers to my questions? ;-)

Happy sunday!
Cheers, Jan-Peter


make-module would be obvious.
But if you try a (eval '(define title "Titel") (make-module)) it fails
with "Unbound variable: define"?
Well, where would a definition for "define" come from in an empty
module?



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

Reply via email to