Hi All, I've been trying to use streams as defined in SICP using guile. A little googling showed that an implementation had already been suggested here: http://lists.gnu.org/archive/html/guile-user/2001-04/msg00220.html
However, when I use this to iterate through the stream I see that guile's memory utilization keeps growing until the iteration is complete . I'm using guile 1.6.8 (also tested 1.8.7) on linux. I observe the memory utilization under top. I tried the same thing with plt-scheme/racket and it did not show a similar leak i.e .the memory growth was capped at a certain point during the iteration. It did not grow beyond that point. >From a little more googling, it appears that a similar memory leak has been discussed before but that investigation was not completed. Here is the thread: http://sources.redhat.com/ml/guile/2000-03/msg00568.html So my questions are: 1. Can it be confirmed that this is a leak in guile's garbage collection? 2. Are there any workarounds (for instance doing an explicit "(gc)" somewhere in the definitions? 3. Any pointers on fixing the underlying issue? 4. I noticed that streams in guile (ice-9 streams) were not implemented in the SICP way. In-fact they were implemented in a way that makes recursive definitions impossible. Was this intentional? Some code to illustrate what I'm trying to do: Simply print all s-expressions in a file to another as follows : (let* ((outport (open-output-file <OUT-FILE-NAME>))) (stream-for-each (lambda (x) (pretty-print x outport)) (port->stream (open-input-file <IN-FILE-NAME>) read))) where port->stream is: (define (port->stream port readproc) (cons-stream (readproc port) (port->stream port readproc))) (defmacro cons-stream (a b) `(cons ,a (delay ,b))) (define stream-null? null?) (define the-empty-stream '()) (define (stream-car stream) (car stream)) (define (stream-cdr stream) (force (cdr stream))) (define (stream-for-each proc s) (if (not (stream-null? s)) (begin (proc (stream-car s)) (stream-for-each proc (stream-cdr s))))) I get the same behavior with the following definition: (define-syntax cons-stream (syntax-rules () ((_ ?car ?cdr) (cons ?car (delay ?cdr))))) Thanks Abhijeet