diff options
author | Hugo Hörnquist <hugo@hornquist.se> | 2019-04-20 22:19:17 +0200 |
---|---|---|
committer | Hugo Hörnquist <hugo@hornquist.se> | 2019-04-20 22:19:17 +0200 |
commit | ceace404791a31702c964e27011c7c85ea4deb6a (patch) | |
tree | aae8bda35bef5fac85d74faec4c225a930b79542 | |
parent | Change how properties procedure work. (diff) | |
download | calp-ceace404791a31702c964e27011c7c85ea4deb6a.tar.gz calp-ceace404791a31702c964e27011c7c85ea4deb6a.tar.xz |
Add '=' case to mod!
Diffstat (limited to '')
-rw-r--r-- | module/util.scm | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/module/util.scm b/module/util.scm index 702873a1..8abf6877 100644 --- a/module/util.scm +++ b/module/util.scm @@ -159,14 +159,27 @@ (begin ((@ (guile) set!) field val) (set! rest ...))))) +(define-syntax modf% + (syntax-rules (=) + ((_ field = (op args ...)) + (set! field (op field args ...))) + ((_ field proc) + (set! field (proc field)))) ) + ;; Like set!, but applies a transformer on the already present value. (define-syntax mod! - (syntax-rules () + (syntax-rules (=) + ((_ field = proc) + (modf% field = proc)) + + ((_ field = proc rest ...) + (begin (modf% field = proc) (mod! rest ...))) + ((_ field proc) - (set! field (proc field))) - ((_ field transform-proc rest ...) - (begin (set! field (transform-proc field)) - (mod! rest ...))))) + (modf% field proc)) + + ((_ field proc rest ...) + (begin (modf% field proc) (mod! rest ...))))) (define-public (concat lists) (apply append lists)) |