2011/3/11 spir <denis.spir@gmail.com>
Hello,

Is an environment implemented as plain Scheme data?

 
If yes, is the current
environment (I mean the set of currently "lookup-able" symbols) accessible?

Yes.
 
Hope I'm clear (don't know yet Scheme's proper vocabulary yet). I'm thinking at
something along the lines of:
    (getSymbolValue env 'a)
beeing equivalent, for a symbol 'a, to:
    (eval 'a)

Gambit has only one environment. It has several namespaces though. The REPL default namespace has the name "~".

Implement this as:
(define (getSymbolValue sy) (eval (string->symbol (string-append "~#" (symbol->string sy))))
 
and
    (defSymbol env 'a 1)
equivalent to:
    (define a 1)

Someone knows this one better than me.

Maybe experiment with (define (defSymbol sy value) (eval `(define ,(string->symbol (string-append "~#" (symbol->string sy)) ,value)))) but no idea.
 
Since it's lisp generally you'd spell out the above rather as get-symbol-value and def-symbol! .

Aside pure reflexivity, this would allow some nice tricks, like unpaking an
associative table into the current env:
    (unpack (parseRecord line))
where parseRecord returns eg a (name phone email) table, would def symbols
under those names in env.

Generally you want to avoid using the global namespace as much as you ever can. You want to use it only as a trampoline for the real work you do. One of the few things you really need to keep there are [library/module] procedures etc. that you intend to reuse over and over.

Mikael

Denis
--
_________________
vita es estrany
spir.wikidot.com

_______________________________________________
Gambit-list mailing list
Gambit-list@iro.umontreal.ca
https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list