[Top][All Lists]
[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