[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Stream-filter and space leaks
sperber@xxxxxxxxxxxxxxxxxxxxxxxxxxx (Michael Sperber [Mr. Preprocessor]) writes:
> >>>>> "Matze" == Matthias Neubauer <neubauer@xxxxxxxxxxxxxxxxxxxxxxxxxx> writes:
>
> Matze> Richard Kelsey <kelsey@xxxxxxx> writes:
>
> >> Our different experiences may be based on differences between the 0.57 and
> >> the Scheme 48 version underlying Scsh 0.6.3. I don't know which version
> >> that is.
>
> Matze> Well, that's what I already feared. To me, this means either that my
> Matze> scsh is somehow "buggy" or that we still don't have a portable,
> Matze> non-leaking implementation of STREAM-FILTER.
>
> There's no way to do that in general. However, if you take the code
> Phil posted last and lambda-lift the internal definitions out, you'll
> get something that works pretty much everywhere (certainly in Scheme
> 48 and scsh), I conjecture.
Yes, this does the trick. After lambda-lifting STREAM-FILTER,
(stream-car (stream-filter (lambda (x) (zero? x)) (stream-from 1)))
also loops in my scsh.
The real problem is see is the following: as soon as I apply some kind
of abstraction over STREAM-FILTER---which is something every Schemer
wants to do of course---, hell breaks loose again. E.g., if I type
(define (filter-zero stream)
(stream-filter (lambda (x) (zero? x))
stream))
(stream-car (filter-zero (stream-from 1)))
in scsh, I will again see a space leak.
Considering all the major Scheme implementations, how common is it to
use a flat closure representation for procedures?
-Matthias
--
Matthias Neubauer |
Universität Freiburg, Institut für Informatik | tel +49 761 203 8060
Georges-Köhler-Allee 79, 79110 Freiburg i. Br., Germany | fax +49 761 203 8052