diff options
author | Kevin Ryde <user42@zip.com.au> | 2005-02-17 20:35:11 +0000 |
---|---|---|
committer | Kevin Ryde <user42@zip.com.au> | 2005-02-17 20:35:11 +0000 |
commit | 6282d93dba372c30f512e18d7e1b887277d2df61 (patch) | |
tree | 62b15fddcbaa061a2b40676f93234ba63e7e2ec8 /srfi/srfi-1.scm | |
parent | 94c442be6669b1fd56d38e8d6cf4d4de2ec25926 (diff) | |
download | guile-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.scm | 8 |
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)))))) |