guile-user
[Top][All Lists]
Advanced

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

Re: define - any name


From: Marius Vollmer
Subject: Re: define - any name
Date: 04 May 2003 01:41:09 +0200
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3

Egil Moeller <address@hidden> writes:

> guile> (define
>   quasieval
>   (procedure->macro
>    (lambda (code env)
>      (local-eval (list 'quasiquote (cdr code)) env))))
> guile> (define y 'foo)
> guile> (quasieval define ,y 'zzg)
> guile> foo
> zzg
> guile>
> 
> Hm, how do one submit an SRFI? I think my quasieval could be of use by
> others too, if it does not allready exist somewhere out there...

Oops, that a strange thing you are doing here.  You can't count on
macro expansion to happen at a specific time.  For example, 'foo'
doesn't need to be defined when the quasieval macro is expanded.

In general, 'local-eval' should be avoided like the plaque as it
destroys the important property of Scheme that lexical environments
are fixed at compile time.

Top-level environments (aka modules) can be changed at run-time.  When
ordinary macros and 'define' is not enough, you can use
'module-define!':

  guile> (define y 'foo)
  guile> (module-define! (current-module) y 'zzg)
  guile> foo
  zzg

-- 
GPG: D5D4E405 - 2F9B BCCC 8527 692A 04E3  331E FAF8 226A D5D4 E405




reply via email to

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