diff options
author | Hugo Hörnquist <hugo@hornquist.se> | 2020-01-13 03:00:26 +0100 |
---|---|---|
committer | Hugo Hörnquist <hugo@hornquist.se> | 2020-01-13 03:00:26 +0100 |
commit | 4fb7d3744fa9fda3a3fef74f297a12142e94fe81 (patch) | |
tree | 8140bd1823ed2c070bacc3e08548ed58db8ac3be /module/util | |
parent | Util set-> macro. (diff) | |
download | calp-4fb7d3744fa9fda3a3fef74f297a12142e94fe81.tar.gz calp-4fb7d3744fa9fda3a3fef74f297a12142e94fe81.tar.xz |
Multiple values for let-env.
Diffstat (limited to '')
-rw-r--r-- | module/util.scm | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/module/util.scm b/module/util.scm index 910a2400..31fd9997 100644 --- a/module/util.scm +++ b/module/util.scm @@ -389,14 +389,19 @@ -;; TODO multiple values (define-syntax let-env (syntax-rules () - [(_ ((name value)) + [(_ ((name value) ...) body ...) - (let ((sname (symbol->string (quote name)))) - (let ((ogenv (getenv sname))) - (setenv sname value) - (let ((return (begin body ...))) - (setenv sname ogenv) - return)))])) + + (let ((env-pairs + (map (lambda (n new-value) + (list n new-value (getenv n))) + (list (symbol->string (quote name)) ...) + (list value ...)))) + (for-each (lambda (pair) (setenv (car pair) (cadr pair))) + env-pairs) + (let ((return (begin body ...))) + (for-each (lambda (pair) (setenv (car pair) (caddr pair))) + env-pairs) + return))])) |