diff options
Diffstat (limited to 'guile/starlet/utils.scm')
-rw-r--r-- | guile/starlet/utils.scm | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/guile/starlet/utils.scm b/guile/starlet/utils.scm index 16e3364..2046a0a 100644 --- a/guile/starlet/utils.scm +++ b/guile/starlet/utils.scm @@ -20,13 +20,15 @@ ;; (define-module (starlet utils) #:use-module (srfi srfi-1) + #:use-module (srfi srfi-8) #:export (print-hash-table copy-hash-table in-range mean flatten-sublists more-than-one - hirestime)) + hirestime + categorize)) (define (print-hash-table ht) @@ -83,3 +85,17 @@ (/ (cdr a) 1000000)))) + +(define (categorize-rec predicates items so-far) + (if (nil? predicates) + (reverse (cons items so-far)) + (receive + (selected-items remaining-items) + (partition (car predicates) items) + (categorize-rec (cdr predicates) + remaining-items + (cons selected-items so-far))))) + + +(define (categorize items . predicates) + (apply values (categorize-rec predicates items '()))) |