Thank you, David, for your quick response. I'm not sure what you mean by "stick to macros". I thought define-syntax was the way to define a macro. What am I missing?
John > -----Original Message----- > From: David Kastrup [mailto:d...@gnu.org] > Sent: Thursday, May 28, 2020 11:54 AM > To: John Schlomann > Cc: 'Lilypond-User Mailing List' > Subject: Re: Strange error from define-syntax > > "John Schlomann" <jschlom...@wideopenwest.com> writes: > > > Dear Ponders & Schemers, > > > > > > > > I wanted to try creating a simple Scheme macro. I've never done this > before, > > so I may well be going about it all wrong, but the error I get doesn't make > > sense. > > > > > > > > Here is a minimal non-working example: > > > > > > > > \version "2.20.0" > > > > #(use-modules (ice-9 syncase)) > > > > > > > > #(define-syntax set-default > > > > (syntax-rules () > > > > ((set-default name value) > > > > (if (eqv? name 'UNDEF) name value) > > > > ))) > > > > > > > > #(define some-setting 44) > > > > #(set-value some-setting 99) > > > > #(ly:message "some-setting = ~a\n" some-setting) > > > > > > > > This gives the error: > > > > Wrong number of arguments to #<Music function #<procedure #f > > (arg)>> > > > > > > > > Huh? I also tried define-syntax-rule, which came up unbound. Any insights > > into what I'm doing wrong would be welcome. > > syntax-case doesn't work in LilyPond since LilyPond defines \void as a > music function and the Guile 1.8 implementation of syntax-case falls > apart if 'void has a value. > > You are not doing anything wrong other than expecting syntax-case to > work. Stick to macros instead of define-syntax. Sorry for that. > > -- > David Kastrup