From 307e290aaf8aa2f252ebfa98fe25604751580967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Thu, 23 Jan 2020 14:00:12 +0100 Subject: Add case* and define-many. --- module/util.scm | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'module/util.scm') diff --git a/module/util.scm b/module/util.scm index 31fd9997..4cc591ab 100644 --- a/module/util.scm +++ b/module/util.scm @@ -13,7 +13,9 @@ re-export-modules use-modules* -> set set-> aif awhen - tree-map let-lazy let-env) + tree-map let-lazy let-env + case* define-many + ) #:replace (let* set! define-syntax when unless if)) @@ -187,6 +189,13 @@ +;; Like `case', but evals the case parameters +(define-syntax case* + (syntax-rules (else) + [(_ invalue ((value ...) body ...) ...) + (cond ((memv invalue (list value ...)) + body ...) + ...)])) ;; Allow set to work on multiple values at once, ;; similar to Common Lisp's @var{setf} @@ -242,6 +251,13 @@ (set/r! ffield (fproc ffield)))))) +(define-syntax define-many + (syntax-rules () + [(_) (begin)] + [(_ (symbols ...) value rest ...) + (begin (define symbols value) ... + (define-many rest ...))])) + ;; This function borrowed from web-ics (calendar util) (define* (sort* items comperator #:optional (get identity)) "A sort function more in line with how python's sorted works" @@ -374,7 +390,7 @@ ;; operator is used. (define-syntax set (syntax-rules (=) - [(set (acc obj) value) + [(set (acc obj) value) (set-fields obj ((acc) value))] [(set (acc obj) = (op rest ...)) -- cgit v1.2.3