Hi everyone! I have a question about the following example:
> \version "2.19.80" > #(define-macro (why-the-difference obj) > (display (format "~a , " obj)) > `(display (format "~a\n" ,obj))) > > #(why-the-difference (list 1 2 3))% => (list 1 2 3) , (1 2 3) > #(define var (list 1 2 3)) > > #(why-the-difference var)% => var , (1 2 3) > > So, I assume that the difference is because the macro has access to what is typed, and uses that to produce an expression that is later evaluated. So, in the first example, (list 1 2 3) was typed, so that's shown in the output before the comma. While in the second example, var was typed, so the symbol var is shown instead. Is there a way to evaluate the symbol inside the body of the macro? I tried the following to no avail: > \version "2.19.80" > #(use-modules (ice-9 r5rs)) > > #(define-macro (my-attempt obj) > (display (format "~a , " (eval 'obj (interaction-environment)))) > `(display (format "~a\n" ,obj))) > > #(define var (list 1 2 3)) > > #(my-attempt var) > > This generates the error 'unbound variable: obj'. I don't understand why obj is not considered defined, when if I use obj I get the symbol var (as the first snippet showed). Anyways, I *can* evaluate var: > \version "2.19.80" > #(use-modules (ice-9 r5rs)) > > #(define-macro (my-attempt obj) > (display (format "~a , " (eval 'var (interaction-environment)))) > `(display (format "~a\n" ,obj))) > > #(define var (list 1 2 3)) > > #(my-attempt var)% => (1 2 3) , (1 2 3) > > Which makes sense. This achieves what I want but it is not useful because I need to know the name of the variable before-hand, so it will not work dynamically. Does anyone know of a way around this? Thank you in advance! Stéfano
_______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user