Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;;
- ;;; The first attempt on macros:
- ;;;
- ;;; (getenv "asdf")
- ;;; => "999"
- ;;;
- ;;; (let-env (("asdf" "123"))
- ;;; (getenv "asdf"))
- ;;; => "123"
- ;;;
- ;;; (getenv "asdf")
- ;;; => "999"
- ;;;
- (define-syntax let-env
- (syntax-rules ()
- ((let-env ((var val) ...) exp exp* ...) ; pattern
- ;; Any better way?
- (let* ((env (list (cons var val) ...)) ; template
- (vars (map car env))
- (new (map cdr env))
- (old (map getenv vars)))
- (for-each setenv vars new)
- (let ((retval (begin exp exp* ...)))
- (for-each setenv vars old)
- retval)))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement