aboutsummaryrefslogtreecommitdiff
path: root/module/hnh/util.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/hnh/util.scm')
-rw-r--r--module/hnh/util.scm19
1 files changed, 19 insertions, 0 deletions
diff --git a/module/hnh/util.scm b/module/hnh/util.scm
index 7509fc86..d5923e79 100644
--- a/module/hnh/util.scm
+++ b/module/hnh/util.scm
@@ -58,6 +58,11 @@
assq-ref-all
assv-ref-all
+ uniq
+ univ
+ uniqv
+ unique
+
vector-last
->string
@@ -543,6 +548,20 @@
(define (assv-ref-all alist key) (ass%-ref-all alist key eqv?))
+(define (unique% = lst)
+ (cond ((null? lst) lst)
+ ((null? (cdr lst)) lst)
+ ((and (pair? lst)
+ (= (car lst) (cadr lst)))
+ (uniq (cons (car lst) (cddr lst))))
+ (else (cons (car lst)
+ (uniq (cdr lst))))))
+
+(define (uniq lst) (unique% eq? lst))
+(define (uniqv lst) (unique% eqv? lst))
+(define univ uniqv)
+(define (unique lst) (unique% equal? lst))
+
(define (vector-last v)