From ceace404791a31702c964e27011c7c85ea4deb6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Sat, 20 Apr 2019 22:19:17 +0200 Subject: Add '=' case to mod! --- module/util.scm | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'module/util.scm') 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)) -- cgit v1.2.3