aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@hornquist.se>2019-04-20 22:19:17 +0200
committerHugo Hörnquist <hugo@hornquist.se>2019-04-20 22:19:17 +0200
commitceace404791a31702c964e27011c7c85ea4deb6a (patch)
treeaae8bda35bef5fac85d74faec4c225a930b79542
parentChange how properties procedure work. (diff)
downloadcalp-ceace404791a31702c964e27011c7c85ea4deb6a.tar.gz
calp-ceace404791a31702c964e27011c7c85ea4deb6a.tar.xz
Add '=' case to mod!
-rw-r--r--module/util.scm23
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))