This is the mail archive of the guile@cygnus.com mailing list for the guile project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Marius-
Is this closer?
(defmacro fluid-let (binding-ls . body)
(let* ((expanded-binding-ls
(map (lambda (binding)
(append binding (list (gensym))))
binding-ls))
(tmp-var (gensym))
(environment-ls
(map (lambda (binding)
`(,(caddr binding) ,(cadr binding)))
expanded-binding-ls))
(swap-ls
(map (lambda (binding)
`(begin
(set! ,tmp-var ,(car binding))
(set! ,(car binding) ,(caddr binding))
(set! ,(caddr binding) ,tmp-var)))
expanded-binding-ls)))
`(let ,environment-ls
(let ((,tmp-var #f))
(dynamic-wind
(lambda () ,@swap-ls)
(lambda () ,@body)
(lambda () ,@swap-ls))))))
Now on to with-fluids...
-russ
--
Don't try to teach a pig to sing: it's useless, and annoys the pig.