summaryrefslogtreecommitdiff
path: root/srfi/srfi-1.scm
diff options
context:
space:
mode:
authorKevin Ryde <user42@zip.com.au>2005-02-17 20:35:11 +0000
committerKevin Ryde <user42@zip.com.au>2005-02-17 20:35:11 +0000
commit6282d93dba372c30f512e18d7e1b887277d2df61 (patch)
tree62b15fddcbaa061a2b40676f93234ba63e7e2ec8 /srfi/srfi-1.scm
parent94c442be6669b1fd56d38e8d6cf4d4de2ec25926 (diff)
downloadguile-6282d93dba372c30f512e18d7e1b887277d2df61.tar.gz
(lset-adjoin): Revert change using `list' not `acc', the
spec is not quite clear, but reference code uses acc, so do that.
Diffstat (limited to 'srfi/srfi-1.scm')
-rw-r--r--srfi/srfi-1.scm8
1 files changed, 7 insertions, 1 deletions
diff --git a/srfi/srfi-1.scm b/srfi/srfi-1.scm
index 8d8a21d72..21cad7431 100644
--- a/srfi/srfi-1.scm
+++ b/srfi/srfi-1.scm
@@ -733,11 +733,17 @@
(every (lambda (el) (member el f (lambda (x y) (= y x)))) (car r))
(lp (car r) (cdr r)))))))
+;; It's not quite clear if duplicates among the `rest' elements are meant to
+;; be cast out. The spec says `=' is called as (= lstelem restelem),
+;; suggesting perhaps not, but the reference implementation shows the "list"
+;; at each stage as including those elements already added. The latter
+;; corresponds to what's described for lset-union, so that's what's done.
+;;
(define (lset-adjoin = list . rest)
(let lp ((l rest) (acc list))
(if (null? l)
acc
- (if (member (car l) list (lambda (x y) (= y x)))
+ (if (member (car l) acc (lambda (x y) (= y x)))
(lp (cdr l) acc)
(lp (cdr l) (cons (car l) acc))))))