guile-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

guile/guile-core/srfi ChangeLog srfi-1.scm


From: Gary Houston
Subject: guile/guile-core/srfi ChangeLog srfi-1.scm
Date: Sun, 05 Aug 2001 03:12:37 -0700

CVSROOT:        /cvs
Module name:    guile
Changes by:     Gary Houston <address@hidden>   01/08/05 03:12:37

Modified files:
        guile-core/srfi: ChangeLog srfi-1.scm 

Log message:
        * srfi-1.scm (check-arg-type, non-negative-integer?): a couple of new
        internal definitions.
        (list-tabulate, iota): check for bad arguments that otherwise
        give weird output.
        (filter): check for proper list, to avoid infinite recursion on
        a circular list.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/srfi/ChangeLog.diff?cvsroot=OldCVS&tr1=1.61&tr2=1.62&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/guile/guile-core/srfi/srfi-1.scm.diff?cvsroot=OldCVS&tr1=1.9&tr2=1.10&r1=text&r2=text

Patches:
Index: guile/guile-core/srfi/ChangeLog
diff -u guile/guile-core/srfi/ChangeLog:1.61 
guile/guile-core/srfi/ChangeLog:1.62
--- guile/guile-core/srfi/ChangeLog:1.61        Sat Aug  4 11:37:08 2001
+++ guile/guile-core/srfi/ChangeLog     Sun Aug  5 03:12:37 2001
@@ -1,3 +1,12 @@
+2001-08-05  Gary Houston  <address@hidden>
+
+       * srfi-1.scm (check-arg-type, non-negative-integer?): a couple of new
+       internal definitions.
+       (list-tabulate, iota): check for bad arguments that otherwise
+       give weird output.
+       (filter): check for proper list, to avoid infinite recursion on
+       a circular list.
+
 2001-08-04  Gary Houston  <address@hidden>
 
        * srfi-1.scm (filter): replaced with a tail-recursive version.
Index: guile/guile-core/srfi/srfi-1.scm
diff -u guile/guile-core/srfi/srfi-1.scm:1.9 
guile/guile-core/srfi/srfi-1.scm:1.10
--- guile/guile-core/srfi/srfi-1.scm:1.9        Sat Aug  4 11:37:08 2001
+++ guile/guile-core/srfi/srfi-1.scm    Sun Aug  5 03:12:37 2001
@@ -254,7 +254,18 @@
 (define (xcons d a)
   (cons a d))
 
+;; internal helper, similar to (scsh utilities) check-arg.
+(define (check-arg-type pred arg caller)
+  (if (pred arg)
+      arg
+      (scm-error 'wrong-type-arg caller
+                "Wrong type argument: ~S" (list arg) '())))
+
+;; the srfi spec doesn't seem to forbid inexact integers.
+(define (non-negative-integer? x) (and (integer? x) (>= x 0)))
+
 (define (list-tabulate n init-proc)
+  (check-arg-type non-negative-integer? n "list-tabulate")
   (let lp ((n n) (acc '()))
     (if (<= n 0)
       acc
@@ -272,6 +283,7 @@
          (lp (cdr r) (cdr p)))))))
 
 (define (iota count . rest)
+  (check-arg-type non-negative-integer? count "iota")
   (let ((start (if (pair? rest) (car rest) 0))
        (step (if (and (pair? rest) (pair? (cdr rest))) (cadr rest) 1)))
     (let lp ((n 0) (acc '()))
@@ -720,6 +732,7 @@
 ;;; Filtering & partitioning
 
 (define (filter pred list)
+  (check-arg-type list? list "caller")  ; reject circular lists.
   (letrec ((filiter (lambda (pred rest result)
                      (if (null? rest)
                          (reverse! result)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]