implemented Deleting

This commit is contained in:
stibear 2014-02-11 16:40:59 +09:00
parent 978e800104
commit 00c8351d5f
1 changed files with 37 additions and 2 deletions

View File

@ -367,13 +367,13 @@
(if (null? clists) (if (null? clists)
(let rec ((clist clist) (acc '())) (let rec ((clist clist) (acc '()))
(if (null? clist) (if (null? clist)
(reverse acc) (reverse! acc)
(rec (cdr clist) (cons (f (car clist)) acc)))) (rec (cdr clist) (cons (f (car clist)) acc))))
(let rec ((clists (cons clist clists)) (acc '())) (let rec ((clists (cons clist clists)) (acc '()))
(if (every pair? clists) (if (every pair? clists)
(rec (map cdr clists) (rec (map cdr clists)
(cons* (apply f (map car clists)) acc)) (cons* (apply f (map car clists)) acc))
(reverse acc))))) (reverse! acc)))))
(define (pair-for-each f clist . clists) (define (pair-for-each f clist . clists)
(if (null? clist) (if (null? clist)
@ -562,11 +562,46 @@
;; # Deleting ;; # Deleting
;; delete delete-duplicates ;; delete delete-duplicates
;; delete! delete-duplicates! ;; delete! delete-duplicates!
(define (delete x list . =)
(let ((= (if (null? =) equal? (car =))))
(remove (lambda (a) (= x a)) list)))
(define (delete! x list . =)
(let ((= (if (null? =) equal? (car =))))
(remove! (lambda (a) (= x a)) list)))
(define (delete-duplicates list . =)
(let ((= (if (null? =) equal? (car =))))
(let rec ((list list))
(if (null? list)
list
(let* ((x (car list))
(rest (cdr list))
(deleted (rec (delete x list =))))
(if (eq? rest deleted) list (cons x deleted)))))))
(define (delete-duplicates! list . =)
(let ((= (if (null? =) equal? (car =))))
(let rec ((list list))
(if (null? list)
list
(let* ((x (car list))
(rest (cdr list))
(deleted (rec (delete! x list =))))
(if (eq? rest deleted) list (cons x deleted)))))))
(export delete delete-duplicates
delete! delete-duplicates!)
;; # Association lists ;; # Association lists
;; assoc assq assv ;; assoc assq assv
;; alist-cons alist-copy ;; alist-cons alist-copy
;; alist-delete alist-delete! ;; alist-delete alist-delete!
(define (alist-cons key datum alist)
(cons (cons key datum) alist))
(define )
(export assoc assq assv) (export assoc assq assv)
;; # Set operations on lists ;; # Set operations on lists