795 |
(else |
(else |
796 |
(lp (map1 cdr lists) (+ i 1))))))) |
(lp (map1 cdr lists) (+ i 1))))))) |
797 |
|
|
|
;;; Deletion |
|
|
|
|
|
(define (delete x list . rest) |
|
|
(let ((l= (if (pair? rest) (car rest) equal?))) |
|
|
(let lp ((l list)) |
|
|
(if (null? l) |
|
|
'() |
|
|
(if (l= x (car l)) |
|
|
(lp (cdr l)) |
|
|
(cons (car l) (lp (cdr l)))))))) |
|
|
|
|
|
(define (delete! x list . rest) |
|
|
(let ((l= (if (pair? rest) (car rest) equal?))) |
|
|
(delete x list l=))) ; XXX:optimize |
|
|
|
|
|
(define (delete-duplicates list . rest) |
|
|
(let ((l= (if (pair? rest) (car rest) equal?))) |
|
|
(let lp0 ((l1 list)) |
|
|
(if (null? l1) |
|
|
'() |
|
|
(if (let lp1 ((l2 (cdr l1))) |
|
|
(if (null? l2) |
|
|
#f |
|
|
(if (l= (car l1) (car l2)) |
|
|
#t |
|
|
(lp1 (cdr l2))))) |
|
|
(lp0 (cdr l1)) |
|
|
(cons (car l1) (lp0 (cdr l1)))))))) |
|
|
|
|
|
(define (delete-duplicates list . rest) |
|
|
(let ((l= (if (pair? rest) (car rest) equal?))) |
|
|
(let lp ((list list)) |
|
|
(if (null? list) |
|
|
'() |
|
|
(cons (car list) (lp (delete (car list) (cdr list) l=))))))) |
|
|
|
|
|
(define (delete-duplicates! list . rest) |
|
|
(let ((l= (if (pair? rest) (car rest) equal?))) |
|
|
(delete-duplicates list l=))) ; XXX:optimize |
|
|
|
|
798 |
;;; Association lists |
;;; Association lists |
799 |
|
|
800 |
(define (alist-cons key datum alist) |
(define (alist-cons key datum alist) |