Advertisement
Guest User

Untitled

a guest
Nov 5th, 2013
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 0.61 KB | None | 0 0
  1. ;;;
  2. ;;; The first attempt on macros:
  3. ;;;
  4. ;;; (getenv "asdf")
  5. ;;; => "999"
  6. ;;;
  7. ;;; (let-env (("asdf" "123"))
  8. ;;;   (getenv "asdf"))
  9. ;;; => "123"
  10. ;;;
  11. ;;; (getenv "asdf")
  12. ;;; => "999"
  13. ;;;
  14. (define-syntax let-env
  15.   (syntax-rules ()
  16.     ((let-env ((var val) ...) exp exp* ...) ; pattern
  17.      ;; Any better way?
  18.      (let* ((env (list (cons var val) ...)) ; template
  19.             (vars (map car env))
  20.             (new (map cdr env))
  21.             (old (map getenv vars)))
  22.        (for-each setenv vars new)
  23.        (let ((retval (begin exp exp* ...)))
  24.          (for-each setenv vars old)
  25.          retval)))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement