Hi,
I need (well) to inject variables into closures, and have come up with the following macro to do so: (define-macro (inject-variable name value) (define env (gensym)) (define closure (gensym)) (define vars (gensym)) (define secondname (gensym)) (define secondval (gensym)) (define first-env (gensym)) `((procedure->macro (lambda (,(gensym) ,env) (cond ((null? (cdr ,env)) (let ((,closure (car ,env))) (set-car! ,env (cons ',name ,value)) (set-cdr! ,env (list ,closure)))) ((null? (null? (cdr (car ,env)))) (let* ((,vars (car ,env)) (,secondname (car vars)) (,secondval (cdr vars))) (set-car! ,env (list (list ',name firstname) ,value ,secondval)))) (else (let ((,first-env (car ,env))) (set-cdr! ,first-env (cons ,value (cdr ,first-env))) (set-car! ,first-env (cons ',name (car ,first-env))) (set-car! ,env ,first-env)))))))) (let () (display (defined? 'gakk)) (inject-variable gakk 90) gakk) => #f90 Now I wonder, is this safe and portable? Or are there other and better ways to do this? Thanks for any answers. Kjetil. _______________________________________________ Guile-user mailing list Guile-user@gnu.org http://lists.gnu.org/mailman/listinfo/guile-user