Hi Vincent,
Don't try this just yet. I want other people to give it a look-over and
make sure it isn't foolish and dangerous before anybody lets it out in the
wild.
This doesn't use the exception, and it doesn't use a c function, and it
doesn't do database lookups. However, it can be used anywhere (inside lets
and lambdas) to set! a variable that hasn't been defined. It defines the
variable at top level, and then sets it wherever you are. Note: it does
establish a global binding rather than a local binding. This may or may
not be what you want. I think that using this to establish a local binding
would be an extremely difficult thing to do, as well as probably a bad idea.
(define-macro (dyn-set! var val)
`(begin (if (not (defined? (quote ,var)))
(primitive-eval `(define ,(quote ,var) #f)))
(set! ,var ,val)))
(defined? 'undefined-symbol) ; => #f
;(set! undefined-symbol #t) Gives an error.
(dyn-set! undefined-symbol #t) ; No error.
(defined? 'undefined-symbol) ; => #t
Regards,
Jon
Vincent De Groote wrote:
Hello,
Is there a way to catch an "unbound-variable" exception, bind the
variable on the fly, and continue execution as if the exception didn't
occurs ?
I'd like to catch this exception in a c function: the exception context
should be available, to retrieve the variable or function name. This
handler will lookup the value in a relational database.
Is this possible ?
Thanks for you replies
Vincent De Groote
_______________________________________________
Guile-user mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/guile-user
_______________________________________________
Guile-user mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/guile-user