In Guile 1.4, (format "~A" (make-vector 500 0)) leads to a stack
overflow. The reason is a non-tail-recursive implementation of
format:obj->str in (ice-9 format). Here is a patch that fixes this.
--- /home/mkoeppe/s/guile-1.4/ice-9/format.scm~ Mon Jun 12 14:43:34 2000
+++ /home/mkoeppe/s/guile-1.4/ice-9/format.scm Mon Aug 14 11:21:04 2000
@@ -822,13 +822,17 @@
(string-append "("
(let loop ((obj-list obj)
(visited visited)
- (offset 0))
+ (offset 0)
+ (prefix ""))
(cond ((null? (cdr obj-list))
- (obj->str (car obj-list)
- #t
- (cons (car obj-list) visited)))
+ (string-append
+ prefix
+ (obj->str (car obj-list)
+ #t
+ (cons (car obj-list) visited))))
((memq (cdr obj-list) visited)
(string-append
+ prefix
(obj->str (car obj-list)
#t
(cons (car obj-list) visited))
@@ -838,16 +842,18 @@
(list-index visited (cdr obj-list))))
"#"))
((pair? (cdr obj-list))
- (string-append
- (obj->str (car obj-list)
- #t
- (cons (car obj-list) visited))
- " "
- (loop (cdr obj-list)
- (cons (cdr obj-list) visited)
- (+ 1 offset))))
+ (loop (cdr obj-list)
+ (cons (cdr obj-list) visited)
+ (+ 1 offset)
+ (string-append
+ prefix
+ (obj->str (car obj-list)
+ #t
+ (cons (car obj-list) visited))
+ " ")))
(else
(string-append
+ prefix
(obj->str (car obj-list)
#t
(cons (car obj-list) visited))
--
Matthias K�ppe -- http://www.math.uni-magdeburg.de/~mkoeppe
- Re: format "~A" not tail-recursive with lists a... Matthias K�ppe
- Re: format "~A" not tail-recursive with li... Mikael Djurfeldt
