[Top][All Lists]
[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)