lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Define variable only if it doesn't exist / is unbound


From: Thomas Morley
Subject: Re: Define variable only if it doesn't exist / is unbound
Date: Fri, 29 Mar 2019 11:37:26 +0100

Am Fr., 29. März 2019 um 10:00 Uhr schrieb Richard Shann
<address@hidden>:
>
> On Thu, 2019-03-28 at 18:22 -0700, Aaron Hill wrote:
> > On 2019-03-28 3:14 pm, Thomas Morley wrote:
> > > Am Do., 28. März 2019 um 22:22 Uhr schrieb Aaron Hill
> > > <address@hidden>:
> > > >
> > > > On 2019-03-28 2:18 pm, Valentin Villenave wrote:
> > > > > On 3/28/19, Pedro Pessoa <address@hidden> wrote:
> > > > > > I imagined something like:
> > > > > >
> > > > > > %%% pseudo
> > > > > > #(define var
> > > > > >     (not (is-bound? var) 0))
> > > > > > %%%
> > > > >
> > > > > I’d probably probably do something like
> > > > >
> > > > > (null? (ly:parser-lookup 'var))
> > > > >
> > > > > But I’m sure there are better ways :-)
> > > >
> > > > ;;;;
> > > > (if (not (defined? 'foo)) (define foo 47))
> > > > ;;;;
> > > >
> > > >
> > > > -- Aaron Hill
> > >
> > > It's worth mentioning, the above will throw an error in guilev2:
> > >
> > > error: GUILE signaled an error for the expression beginning here
> > > #
> > >  (if (not (defined? 'foo)) (define foo 47))
> > > definition in expression context, where definitions are not allowed
>
> This sounds like a problem I had when Denemo started running under
> Guile 2  - I asked on the guile mailing list and got fixed up with
> this:
>
> ;;; for guile 2.0 compatibility define the define-once procedure to
> work in guile 1.8
> (cond-expand
>    (guile-2) ; nothing
>    (else ; guile < 2.0
>     (define-macro (define-once sym exp)
>       `(define ,sym
>          (if (module-locally-bound? (current-module) ',sym)
>              ,sym
>              ,exp)))))
>
> Apologies in advance if this is un-related, I've not been following
> this thread :(
>
> Richard

Hi Richard,

I tried to understand what you've got from the guile-list.

Thus I opened a guilev2 prompt and simply typed cond-expand:

scheme@(guile-user)> (version)
$1 = "2.2.4.9-71f536"
scheme@(guile-user)> cond-expand
While compiling expression:
Syntax error:
unknown location: source expression failed to match any pattern in
form cond-expand
scheme@(guile-user)>

Well, ok, the guile-manual says:
7.5.2 SRFI-0 - cond-expand
[...]

So I tried:

scheme@(guile-user)> (use-modules (srfi srfi-0))
While compiling expression:
no code for module (srfi srfi-0)

What am I missing?

Cheers,
  Harm



reply via email to

[Prev in Thread] Current Thread [Next in Thread]