diff options
author | Kevin Ryde <user42@zip.com.au> | 2005-04-01 23:47:42 +0000 |
---|---|---|
committer | Kevin Ryde <user42@zip.com.au> | 2005-04-01 23:47:42 +0000 |
commit | 62a875000157f7dd1ff5309838a6d9f7a4092968 (patch) | |
tree | 375756471cbd765d817e2517598e43f2a794fa4c /srfi/srfi-1.scm | |
parent | 6507b8318928b553921cb93a284f0ecb90161ed4 (diff) | |
download | guile-62a875000157f7dd1ff5309838a6d9f7a4092968.tar.gz |
(lset-union): Rewrite to accumulate result by consing in
the order specified by the SRFI.
Diffstat (limited to 'srfi/srfi-1.scm')
-rw-r--r-- | srfi/srfi-1.scm | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/srfi/srfi-1.scm b/srfi/srfi-1.scm index 4ddf12d99..6137618cd 100644 --- a/srfi/srfi-1.scm +++ b/srfi/srfi-1.scm @@ -673,15 +673,17 @@ (lp (cdr l) (cons (car l) acc)))))) (define (lset-union = . rest) - (let lp0 ((l rest) (acc '())) - (if (null? l) - (reverse! acc) - (let lp1 ((ll (car l)) (acc acc)) - (if (null? ll) - (lp0 (cdr l) acc) - (if (member (car ll) acc (lambda (x y) (= y x))) - (lp1 (cdr ll) acc) - (lp1 (cdr ll) (cons (car ll) acc)))))))) + (let ((acc '())) + (for-each (lambda (lst) + (if (null? acc) + (set! acc lst) + (for-each (lambda (elem) + (if (not (member elem acc + (lambda (x y) (= y x)))) + (set! acc (cons elem acc)))) + lst))) + rest) + acc)) (define (lset-intersection = list1 . rest) (let lp ((l list1) (acc '())) |