guile-user
[Top][All Lists]
Advanced

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

Re: Injecting variables into closures.


From: Kjetil S. Matheussen
Subject: Re: Injecting variables into closures.
Date: Thu, 29 Nov 2007 15:44:50 +0100 (CET)



On Thu, 29 Nov 2007, Kjetil S. Matheussen wrote:


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)
...
                        (cond ((null? (cdr ,env))
...
                              ((null? (null? (cdr (car ,env))))


address@hidden&#!


(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)
       (define ,first-env (car ,env))
       (cond ((null? (cdr ,env))
              (let ((,closure ,first-env))
                (set-car! ,env (cons ',name ,value))
                (set-cdr! ,env (list ,closure))))
             ((not (pair? (cdr ,first-env)))
              (let* ((,vars ,first-env)
                     (,secondname (car ,vars))
                     (,secondval (cdr ,vars)))
                (set-car! ,env
                          (list (list ',name ,secondname)
                                ,value ,secondval))))
             (else
              (set-cdr! ,first-env
                        (cons ,value (cdr ,first-env)))
              (set-car! ,first-env
                        (cons ',name (car ,first-env)))
              (set-car! ,env ,first-env)))))))


Sorry. :-)





reply via email to

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