[plt-scheme] v4 questions
On Mar 30, Doug Orleans wrote:
> Mark Engelberg writes:
> > I've been looking through the preview reference:
> > http://pre.plt-scheme.org/docs/html/reference/index.html for v4.0, and
> > have a few comments/questions.
> >
> > 1. Why no streams? Wouldn't it be nice to have a solid stream
> > implementation with namings that are consistent with the PLTScheme
> > list functions, and integrated into the comprehension syntax, i.e.,
> > for/stream ? Please consider this...
>
> I kind of agree, but this would also be pretty simple to do as a
> PLaneT package. Here's a start:
>
> (define-syntax (for/stream stx)
> [...])
I have never seen a practical need for something like this (where by
"this" I mean a general facility to turn a sequence of side-effects
into a stream of values). If you have a lazy cons, then (IME) it's
usually easier to just use it directly. If you have a `for' loop with
side effects, you can just keep it as such.
> (define (in-stream s)
> (make-do-sequence
> (lambda ()
> (values stream-car stream-cdr s stream-pair? void void))))
Why not a generic `in-delayed' which makes up the usual iterator
values, then wraps them all in functions that automatically force
promises? This way you don't have to pre-choose whether to use even
or odd streams, whether you delay the cars or not etc, plus you get it
to work with a bunch of other lazy types (as long as they're using the
same delay/force).
> > 4. I noticed that the built-in list functions and string functions are
> > a tiny bit beefier than v372, but still fall short from the more
> > complete SRFI implementations. I hope that it will be extremely
> > easy to bring in the missing functions without conflict. In v372
> > it's a bit awkward to get a full suite of string and list
> > functions because of conflicts.
>
> As of a week or two ago, you can do the following and not get any
> conflicts:
>
> #lang scheme
> (require srfi/1)
> (require srfi/13)
>
> In other words, extremely easy!
There is still a problem with requiring both srfi/1 and scheme/list.
A solution for that is:
(require scheme/list (subtract-in srfi/1 scheme/list))
which will grab everything from scheme/list, and stuff from srfi/1
that are not provided by scheme/list. (This is using the
scheme/require library.)
--
((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
http://www.barzilay.org/ Maze is Life!