* misc-modules.texi (File Tree Walk): New chapter.
[bpt/guile.git] / srfi / srfi-1.scm
index 3700881..b22806a 100644 (file)
@@ -43,7 +43,7 @@
  ;; cons*                              <= in the core
  ;; make-list                          <= in the core
  list-tabulate
- ;; list-copy                          <= in the core
+ list-copy
  circular-list
  ;; iota                               ; Extended.
 
@@ -63,7 +63,7 @@
  ;; caar                               <= in the core
  ;; cadr                               <= in the core
  ;; cdar                               <= in the core
-o ;; cddr                              <= in the core
+ ;; cddr                               <= in the core
  ;; caaar                              <= in the core
  ;; caadr                              <= in the core
  ;; cadar                              <= in the core
@@ -207,14 +207,14 @@ o ;; cddr                         <= in the core
  ;; set-car!                           <= in the core
  ;; set-cdr!                           <= in the core
  )
-  :re-export (cons list cons* make-list list-copy pair? null?
+  :re-export (cons list cons* make-list pair? null?
              car cdr caar cadr cdar cddr
              caaar caadr cadar caddr cdaar cdadr cddar cdddr
              caaaar caaadr caadar caaddr cadaar cadadr caddar cadddr
              cdaaar cdaadr cdadar cdaddr cddaar cddadr cdddar cddddr
              list-ref last-pair length append append! reverse reverse!
              filter filter! memq memv assq assv set-car! set-cdr!)
-  :replace (iota map for-each map-in-order list-index member
+  :replace (iota map for-each map-in-order list-copy list-index member
            delete delete! assoc)
   )
 
@@ -347,16 +347,9 @@ o ;; cddr                          <= in the core
 
 (define (car+cdr x) (values (car x) (cdr x)))
 
-(define (take x i)
-  (let lp ((n i) (l x) (acc '()))
-    (if (<= n 0)
-      (reverse! acc)
-      (lp (- n 1) (cdr l) (cons (car l) acc)))))
-(define (drop x i)
-  (let lp ((n i) (l x))
-    (if (<= n 0)
-      l
-      (lp (- n 1) (cdr l)))))
+(define take list-head)
+(define drop list-tail)
+
 (define (take-right flist i)
   (let lp ((n i) (l flist))
     (if (<= n 0)
@@ -421,45 +414,6 @@ o ;; cddr                          <= in the core
 
 ;;; Miscelleneous: length, append, concatenate, reverse, zip & count
 
-(define (length+ clist)
-  (if (null? clist)
-    0
-    (let lp ((hare (cdr clist)) (tortoise clist) (l 1))
-      (if (null? hare)
-       l
-       (let ((hare (cdr hare)))
-         (if (null? hare)
-           (+ l 1)
-           (if (eq? hare tortoise)
-             #f
-             (lp (cdr hare) (cdr tortoise) (+ l 2)))))))))
-
-(define (concatenate l-o-l)
-  (let lp ((l l-o-l) (acc '()))
-    (if (null? l)
-      (reverse! acc)
-      (let lp0 ((ll (car l)) (acc acc))
-       (if (null? ll)
-         (lp (cdr l) acc)
-         (lp0 (cdr ll) (cons (car ll) acc)))))))
-
-(define (concatenate! l-o-l)
-  (let lp0 ((l-o-l l-o-l))
-    (cond
-      ((null? l-o-l)
-       '())
-      ((null? (car l-o-l))
-       (lp0 (cdr l-o-l)))
-      (else
-       (let ((result (car l-o-l)) (tail (last-pair (car l-o-l))))
-        (let lp ((l (cdr l-o-l)) (ntail tail))
-          (if (null? l)
-            result
-            (begin
-              (set-cdr! ntail (car l))
-              (lp (cdr l) (last-pair ntail))))))))))
-
-
 (define (append-reverse rev-head tail)
   (let lp ((l rev-head) (acc tail))
     (if (null? l)
@@ -669,15 +623,6 @@ o ;; cddr                          <= in the core
 
 ;;; Filtering & partitioning
 
-(define (partition pred list)
-  (if (null? list)
-    (values '() '())
-    (if (pred (car list))
-      (receive (in out) (partition pred (cdr list))
-              (values (cons (car list) in) out))
-      (receive (in out) (partition pred (cdr list))
-              (values in (cons (car list) out))))))
-
 (define (remove pred list)
   (filter (lambda (x) (not (pred x))) list))
 
@@ -802,46 +747,6 @@ o ;; cddr                          <= in the core
            (else
             (lp (map1 cdr lists) (+ i 1)))))))
 
-;;; Deletion
-
-(define (delete x list . rest)
-  (let ((l= (if (pair? rest) (car rest) equal?)))
-    (let lp ((l list))
-      (if (null? l)
-       '()
-       (if (l= (car l) x)
-         (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
-
 ;;; Association lists
 
 (define (alist-cons key datum alist)